c++11语言新特性

template表达式内的空格

在两个template表达式的闭符之间放一个空格的要求已经过时了,以下两种写法都正确。

nullptr和std::nullptr_t

c++11鼓励使用nullptr来取代0或者NULL来表示空指针。这个特性可以避免把一个空指针解释成一个整形值,比如:

nullptr是个新关键字。它被自动转换为各种pointer类型,但不会转换为整形值。它是std::nullptr_t类型。

auto类型

c++11允许你声明一个变量而不需要指明它的类型,只需要说它是auto类型。然后它的类型会根据其初值自动推导出来。这意味这auto类型变量就需要马上初始化。

auto变量自动推导类型,大大简化了我们的编程工作。

一致性初始化与初值列

c++有多种初始化变量的方法,比如大括号,赋值操作符,小括号。为此c++11引入一个一致性初始化的概念,任何类型都可以用大括号来初始化。

空的初始列会别初始化为0或者nullptr,比如:

用大括号初始化值不能窄化。

c++标准库提供了一个std::initializer_list来支持一系列值进行初始化。

for循环

c++ 11引入了一种新的for循环形式:

在新的形式中,用户可以使用for去迭代遍历C风格的数组、初始化列表,以及所有非成员begin()和end被重载的容器,都可以使用新的for循环形式。

Move语义和右值引用

move语义避免非必要的拷贝和临时对象。

std::move到coll中,不必再拷贝。世界上是将实参转换成一个右值引用。
即某个不再被需要的(临时)对象,你可以偷转它的内容。

新式字符串字面常量

两者等价,R可以保持特殊字符转义。
u8定义UTF-8编码的字符串,char16_t。
u定义char16_t
U定义char32_t
L定义wchar_t

发表评论

电子邮件地址不会被公开。 必填项已用*标注