C++ Primer阅读笔记--C++11新标准总结1

1--constexpr

        常量表达式表示值不会改变,在编译过程中就能得到计算结果的表达式;C++11新标准允许将变量声明为 constexpr 类型,以便由编译器来验证变量的值是否是一个常量表达式

        声明为 constexpr 的变量一定是一个常量,必须用常量表达式进行初始化;

        C++新标准允许定义一种特殊的 constexpr 函数,其足够简单以使编译阶段就能计算结果;可以用 constexpr 的函数去初始化 constexpr 的变量;

constexpr int mf = 20; // 20是常量表达式
constexpr int limit = mf + 1; // mf + 1是常量表达式
 
constexpr int sz = size(); // 只有当 size 是一个 constexpr 函数时,其是一条正确的声明语句;

        一个 constexpr 指针的初始值必须是 nullptr 或 0,或者是存储于某个固定地址中的对象;

        在 constexpr 声明中如果定义了一个指针,则限定符 constexpr 仅对指针有效,与指针所指的对象无关;

const int *p = nullptr; // p是一个指向整型常量的指针(即*p不可变,p可变)
constexpr int *q = nullptr; // q是一个指向整数的常量指针(即*q可变, q不可变)

        一般来说,如果认定变量是一个常量表达式,则可以将其声明为 constexpr 类型;

2--using

        传统的方法是使用关键字 typedef 来定义类型别名;C++11新标准允许使用关键字 using,即使用别名声明来定义类型的别名;

using A = B;

        关键字 using 作为别名声明的开始, A 为别名,代码的作用是将等号左侧的名字 A 规定为等号右侧类型 B 的别名;

typedef char *pstring;
const pstring cstr = 0; // 语句①
const char *cstr = 0; // 语句②

        语句①和语句②的作用不同,语句①声明了一个指向 char 的常量指针(即 cstr 不可变, *cstr 可变),而语句②声明了一个指向常量 const char 的指针(即 *cstr 不可变,cstr 可变);

3--auto

        C++11新标准引入 auto 类型说明符,使编译器自动分析表达式所属的类型,即 auto 使编译器根据初始值自动推导变量的类型,则 auto 定义的变量必须有初始值;

auto A = B + C; // 根据 B + C 的结果来推断A的类型

        使用 auto 在一条语句中可以声明多个变量,但一条声明语句只能有一个基本数据类型;

auto A = 0, B = 3.14; // 错误,因为A和B的数据类型不一致,违反auto一条声明语句中只有一个基本数据类型的原则;

4--decltype

        C++11新标准引入 decltype 类型说明符,其作用是选择并返回操作数的数据类型;通过 decltype 类型说明符,可以推断出定义变量的类型,而无需用表达式的值来初始化变量;

decltype(f()) sum = x;
// sum的类型就是函数f的返回类型

const int A = 0;
decltype(A) B = 0; // B的类型是const int

        decltype((variable))的结果是引用,而decltype(variable)的结果当且仅当variable是一个引用时才是引用;

int A = 42;
decltype((i)) B ; // 错误,因为B的类型是 int &,引用必须初始化;
decltype(i) C; // 正确,C是一个未被初始化的 int

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值