c++编译---c++11 auto decltype nullptr

auto

auto自动类型推导

1 描述

C语言也有auto关键字,但是其含义只是与static变量做一个区分,一个变量不指定的话默认就是auto。。因为很少有人去用这个东西,所以在C++11中就把原有的auto功能给废弃掉了,而变成了现在的自动类型推导关键字。

2 注意点

(3) auto声明的变量必须要初始化,否则编译器不能判断变量的类型。
(2) c++11中auto不能被声明为返回值
(3) c++14中auto可以作为函数的返回值,但只能用于定义函数,不能用于声明函数

3 效率说明

auto在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响。另外,auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。

decltype

decltype 表达式类型推到函数

用法一:

decltype()的括号里面是用来推导类型的表达式,
float a;double b;decltype(a+b) c得到的,最后的c是double类型。

用法二:

decltype用来定义新类型。
c++11引入以后,我们看到在某些头文件中有如下的语句:
using size_t =decltype(sizeof(0));这个就是新定义了一种类型size_t,其实就是sizeof(0)的类型。

nullptr

指针空值nullptr
nullptr的类型是nullptr_t,能隐式转化成指针类型,用于替代使用在指针上的NULL。

产生原因:

在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。
C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。
而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,考虑:
void foo(char *);
void foo(int);
对于这两个函数来说,如果 NULL 又被定义为了 0 那么 foo(NULL); 这个语句将会去调用 foo(int),从而导致代码违反直观。
为了解决这个问题,C++11 引入了 nullptr 关键字,专门用来区分空指针、0。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值