C++11(三)

自动类型推导。

C++是一种强类型的静态语言,任何变量、表达式都要有明确的类型。

例如:long x = 0L;

对于简单的变量,还是很容易写出它的类型,但是比如说类、命名空间、模板等类型变量,却很难写出该变量的类型。

auto:推导某个变量在赋值语句中的类型。

auto x = 0L;

 

  • auto只能用于赋值语句中类型的推导。
  • atuo总是能推断出值的类型。
  • aotu允许使用const /volatile/&/*等修饰,从而等到新的类型。
  • auto&&总是推断出引用类型。

C++14中, atuo可以推导出函数的返回值类型。

auto func(float x) 
{ 
    return x * x; 
}

decltype·获取表达式类型。 返回一个类型。

int x = 0; 

decltype(x) var = x;

可以用在变量声明、类型定义、函数参数列表、模板参数等任意地方。

decltype(std::less<int>()) functor; //声明一个函数对象。 

decltype(0.0f) func(decltype(0L) x)   

{ 
    return x * x;
 } 

//用于函数返回值和参数声明 

typedef decltype(func)* func_ptr; //简单地定义函数指针类型。

vector<int> iv; decltype(iv)::iterator iter; //计算的来类型,再取其迭代器类型。

template<typaname T> class demo{}; //简单参数模板。

demo<decltype>(v)> obj; //在模板参数列表里使用decltype。

 

  • decltype(var)获取表达式计算结果的值类型。
  • decltype((var))获取表达式计算结果的值引用类型。
int x = 0; decltype(x) var1 = x; //引用类型 

int decltype((x)) var2 = x; //引用类型 int &

decltype(auto) C++14

decltype(auto) x = 6; decltype(auto) y = 7L;

 

 

 

空指针

在C/C++中,空指针一直都是用宏定义NULL来表示。

#define NULL 0

 

C++11/14新增关键字“nullptr"。

int* ptr = nullptr; typedef decltype(nullptr) nullptr_t;

C++有很多种初始化的方法:

  1. 拷贝初始化
  2. 直接初始化
  3. 列表初始化(C++11)

列表初始化:

int x {1}; 

double d{3.4};

//也可以初始化数组和容器。

int nums[]{1, 2, 3}; 

vector<int> {1, 2, 3};

//STL中的容器是使用了std::initializer_list整个轻量级(light-weighted)类模板来完成功能。

 

 

聚合类型(aggregate types):数组、指针、结构、共用体(联合)、位域和枚举。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值