1.
auto自动变量(vs 2010支持)
2.
C++11新增模板类array
C++11支持对模板类vector的列表初始化。
3.
C++11新增了另一种引用,右值引用,是使用&&声明的:
double j = 15.0; double && jref = 2.0*j + 18.5; //不能使用double &声明jref
4.
C++11中模板函数的改善
(1). C++11新增了关键字decltype,解决模板函数中类型定义的问题。
template<class T1, class T2>
void ft(T1 x, T2 y)
{
...
decltype(x+y) xpy = x+y;
...
}
(2). C++11后置返回类型。
auto h(int x, float y) -> double
{/*function body*/}
其中auto是一个占位符,表示后置返回类型提供的类型。
5. C++11提供【线程存储持续性】的方案来存储数据
如果变量是使用关键字thread_local声明的,则其生命周期与所属线程一样长。
6.
初始化动态分配的常规结构或数组(需要用大括号)
struct where
{
double x;
double y;
double z;
}
where* pi = new where {28.1, 33,4, 52.1};//C++11
int *pj = new int [3] {1, 2, 3};//C++11
同样,列表也可用于单值初始化。
7.
C++11中,可将列表初始化运用到类(就像应用于结构和数组那样)。
//若Stock类的构造函数声明如下(此处有默认参数): Stock::Stock(const std::string & co, longn = 0, double pr = 0.0); //则Stock类的对象可以用列表初始化: Stock hot_tip = {"apple", 1000};
C++11提供了名为std::initialize_list的类,可将其作为函数参数或方法参数的类型。
8.
在C++98中只能使用这种技术声明值为整数或枚举的静态常量,而不能存储double常量。(但C++11消除了这个限制)
9.
C++11提供了一种新的枚举——作用域内枚举(其枚举的作用域为类):
enum class egg {Small, Medium, Large};// or enum struct egg {Small, Medium, Large};
可以使用作用域解析运算符访问枚举成员。
枚举类成员不能像常规枚举一样,隐式地转换为某种底层整型类型(提高了作用域内枚举的类型安全),但可以进行强制类型转换。.
C++11 可以选择底层整型类型(默认为int):
enum class : short egg {Small, Medium, Large};//:short将底层整型类型指定为short
10.
在C++98中,关键字explicit不能用于转换函数,但C++11消除了这个限制,在C++11中可将转换运算符声明为显式的。
11.
C++11新增关键字nullptr来表示空指针。(VS 2010支持)
12.
C++11允许类内初始化
class Classy { int mem1 = 10;//类内初始化 const int mem2 = 20;//类内初始化 //... }; //等价于成员初始化列表 Classy::Classy() : mem1(10), mem(20) { ... } //C++11类内初始化过的类,覆盖成员函数的默认值 Classy::Classy(int n) : mem1(n) { ... }
13.
禁用默认函数的方法:
1. 将函数声明为私有的;
2. C++11 使用关键字delete实现。
14.
C++11新增了一项功能——使用模板提供一系列别名:
template<typename T> using arrtype = std::aray<T, 12>; //模板别名arrtype的使用 arrtype<int> days;
C++11还支持可变参数模板