aihot  2020-11-12 09:26:03  OpenCV |   查看评论   

在一个复杂的系统中,很难分辨一个初始值到底是不是常量表达式。C++11允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明constexpr的变量一定是一个常量,而且必须用常量表达式初始化:

1 constexpr int mf = 20;  2 constexpr int limit = mf + 1;  3 constexpr int sz = size(); // 只有当size是一个constexpr函数时才是一条正确的声明语句

用constexpr修饰的指针说明是常量指针,它本身在定义初始化后不可以再更改指向,但是所指的对象可以是个变量。

10,注意指针、常量和类型别名在一块的时候:

1 typedef char* pstring; // pstring是一指向字符的指针
2 const pstring cstr=0; // cstr是一个指向字符的常量指针
3 const pstring *ps; // ps是一个指针,它的对象是指向char的常量指针。

11,auto类型

C++11引入auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。编译器是通过初始值来推算变量的类型,显然,auto定义的变量必须有初始值。

如果我们用一个引用类型去初始化一个auto类型时,得到的类型将是引用对象的类型:

1 int i = 0, &r = i; 2 auto a = r;  // a是一个整数

其次auto一般会忽略掉顶层的const,同时底层的const则会保留下来。

1 const int ci = i, &cr =  ci; 2 auto b = ci; // b是一个整数
3 auto c = cr; // cr是一个整数(ci的顶层const特征被忽略了)
4 auto d =  &i; // d是一个指针(指针是指向整数的指针)
5 auto e =  &ci; // e是一个指向整数常量的指针

如果希望auto推断出的是auto类型是一个顶层的const,需要明确指出:

1 const auto f = ci; 

12,decltype类型指示符

有的时候想从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量,为些C++11引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。

decltype(f()) sum = x; // sum的类型就是f的返回值类型,编译器并不调用f

decltype在处理顶层const和引用的方式与auto不同。

1 const int ci = 0, &cj =  ci; 2 decltype(ci) x = 0            
          
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自C++的那些事:数据与类型

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]