自动类型推导。
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++有很多种初始化的方法:
- 拷贝初始化
- 直接初始化
- 列表初始化(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):数组、指针、结构、共用体(联合)、位域和枚举。