C++11新特性之constexpr 限定符

   constexpr---常量表达式 ,是指值不会改变并且在编译过程就能得到计算结果的表达式。

  C++11新标准规定,可以把变量声明为constexpr类型,该类型的变量将由编译器来验证它的值是否是一个常量表达式。故而,声明为constexpr的变量,一定是一个常量且必须用常量表达式初始化。下面是使用constexpr的注意事项

   1:因为常量表达式在编译时就得到计算,故能声明为constexpr的类型必须是字面值类型,如算术类型,指针和引用;自定义类则不属于字面值类型。

    2:对于声明为constexpr类型的指针,初始值必须为0或null,或这是某个固定地址;引用也类似

   3:限定符constexpr只对指针有效,与其所指对象无关:constexpr int *q = nullptr;//q是一个指向整数的常量指针

  4:可以用constexpr 函数 初始化constexpr变量,constexpr函数的声明定义方式如下:

  constexpr int  test () { return 1 ;};   constexpr int i = test ();  

注意: 1,constexpr函数被隐式地指定为内联函数,在执行初始化时,编译器把对constexpr函数的调用替换成其结果值

    2 ,constexpr函数可以返回非常量,所以, 如果 constexpr 包含参数,当该参数为非常量表达式时,其返回值也不是一个常量,例如

   constexpr test ( int i ){ return i ; } ; int j = 2; 

   constexpr int k =  test(j);//该 语句错误,返回值为非常量表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值