STL学习笔记(二)——C++11新特性

C++11新特性

1.Template 表达式内的空格

//“在两个 template 闭符之间放一个空格”的要求已经过时了:
std::vector<std::list<int> >;   // OK in each C++ version
std::vector<std::list<int>>;    // OK since C++11

2.nullptr 和 std::nullptr_t

//nullptr 是个新关键字。
//它被自动转换为各种 pointer 类型,但不会被转换为任何整数类型,
//其类型为std::nullptr_t,定义于 <cstddef>.

void f(int);
void f(void *);

f(0);          // 调用 f(int).
f(NULL);       // 如果定义NULL为0,则调用 f(int),否则调用 f(void *).
f(nullptr);    // 调用 f(void *).

3.以 auto 完成类型自动推导

// C++11 允许你声明一个变量或对象而不需要指明其类型.
// auto 声明的变量,其类型会根据其初始值被自动推导出来,
// 因此一定需要一个初始化操作.

auto w;                            // 未指定初始值,错误!
auto i = 100;                      // i 为int类型.
double f()
{
	return 3.1415926;
}
auto d = f();                     // d 为double类型.
static auto VAT = 0.19;          // VAT 为static double类型.

4.一致性初始化 与 初值列

// 一致性初始化:面对任何初始化动作,均可使用大括号.
int iNum[] { 1, 2, 3, 4, 5 };
std::vector<int> vecNum { 1, 2, 3, 4, 5 };
std::vector<std::string> vecStr { "aaa", "bbb", "ccc"};
std::complex<double> comNum { 4.0, 3.0}; //复数

// 初值列:强迫初始化为 0 (或nullptr).
int i;                 // i 初始化为未定义值.
int j{};               // j 初始化为 0 .
int * p;               // p 初始化为未定义值.
int * q{};             // q 初始化为 0 .

// 窄化(精度降低或造成数值变动)对大括号而言是不成立的.
int x0(3.4);                                // ok.
int x1 = 3.4;                               // ok.
int x2 { 3.4 };                             // wrong.
int x3 = { 3.4 };                           // wrong.
std::vector<int> v1 { 1, 2, 3 };            // ok.
std::vector<int> v2 { 1.1, 2.2, 3.3 };      // wrong.

// 用户自定义类型之初值列(扩展:可用于定义可变参数函数).
void print(std::initializer_list<int> vals)
{
	// 处理一系列值.
	for(auto p = vals.begin(); p != vals.end(); ++p)
	{
		std::cout << *p << std::endl;
	}
}
print({11,22,33,44,55,66});

5.关键字 explicit

C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值