C++ 11 新关键字

C++ 11 新关键字

auto   delctype

auto 类型说明符。auto让编译器通过初始值来推算变量的类型。
显然,auto定义的变量必须有初始值。
使用auto也能在一条语句中声明多个变量。注意一条声明语句只能有一个基本数据类型。
delctype 类型说明符。从表达式的类型推断要定义的变量的类型。
delctype ()括号内可以是变量、表达式或函数返回值。

//auto delctype
#include 
   
   
    
    
#include
    
    
     
     
using namespace std;
string f(){
return "hi";
}
int main(int argc, char *argv[])
{
    decltype(f()) x="abc  ";//并不真正调用f()
    auto y=x;
    decltype(x) z=y;
    cout<
     
     
      
      <
      
      
       
       <
       
       
      
      
     
     
    
    
   
   

nullptr

C C++中NULL的定义是不一样的。
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
微笑问:为什么C++在NULL上选择不完全兼容C?
答:根本原因和C++的重载函数有关。C++通过搜索匹配参数的机制,试图找到最佳匹配(best-match)的函数,而如果继续支持void*的隐式类型转换,则会带来语义二义性(syntax ambiguous)的问题。

// 考虑下面两个重载函数   
void foo(int i);  
void foo(char* p)  
foo(NULL); // which is called?  

现在使用nullptr关键字,就不用宏了。


 constexpr

constexpr,const expression,常量表达式。是指在编译阶段就能得到计算结果的表达式。如常量与字面值之间的运算。

复杂系统编程中,很难分辨一个初始值到底是不是常量表达式。所以C++11允许将变量声明为constexpr类型,让编译器去验证。

int main()
{

    const int a=1;
    int b=2;
    const int c=a+b;
    //constexpr int d=a+b; 会报错
    //constexpr int d=a+c; 会报错,c是常量但依赖于b,故不是常量表达式
    constexpr int d=a+1;
    // d++;会报错  constexpr定义的变量一定是一个常量,此后用法同常量
    cout<<<
      
      

 final

C++11新标准提供了防止类被继承的方法——在类后使用final关键字。

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值