c++11新特性

目  录


1 常数表达式

目前不被VS2013支持

constexpr int test() 

{

return 5

}

 

int main()

{

int buf[test() + 5];

return 0;

}

 

2 空指针

int * pi = nullptr;

int i = nullptr;

int i = NULL;

 

 

3 类型推导

auto i = ‘a‘;

decltype(i) a;

 

4 以范围为基础的 for 循环

int my_array[5] = { 123710 };

for (int &x : my_array){}

5 无限制的union

vs2013目前不支持

class A

{

public:

A() {}

A(int i){ this->i = i; }

int i = 10;

};

union

{

int a1;

double b;

A a;

};

 

6 新的字符串字面值

C++11 将支持三种Unicode编码方式:UTF-8UTF-16,和UTF-32。除了上述char定义的变更, C++11将增加两种新的字符类别:char16_tchar32_t。它们各自被设计用来存储UTF-16 以及UTF-32的字符。

VS2013目前不支持

const char *s1 = u8"UTF-8 string.";

const char16_t *s2 = u"UTF-16 string.";

const char32_t *s3 = U"UTF-32 string.";

 

7 long long int类别

在 32 比特系统上,一个 long long int 是保有至少 64 个有效比特的整数类别。C99 将这个类别引入了标准 中,目前大多数的 C++ 编译器也支持这种类别。C++11 将把这种类别添加到标准 C++ 中。

 

 

8 允许sizeof运算符作用在类型的数据成员上,无须明确的对象

vs2013目前不支持

class A

{

public:

A() = delete//显示通知编译器,不生成默认的构造函数

//A() = default;

A(int i)

{

this->i = i;

}

int i;

};

sizeof(A::i)

 

 

9 初始化列表

class A

{

public:

A(std::initializer_list<intlist){}

};

A a = { 1456 };

 

10 统一初始化

class A

{

public:

string name;

int id;

};

A a{ "tom"4 };

 

11 对象构造的改良和成员变量初始化

class A

{

public:

A() :A(20)

{}

A(int i)

{

id = i;

}

int id = 10;

};

 

12 显示虚拟函数重载

class A 

{

public:

virtual void test(int i){}

};

 

class B : public A 

{

virtual void test(int ioverride

{

 

}

virtual void test1(float i//override

{

 

}

};

13 禁止默认构造函数

class A

{

public:

A() = delete//显示通知编译器,不生成默认的构造函数

//A() = default;

A(int i)

{

this->i = i;

}

int i;

};

 

14 外部模板

告诉编译器不要在该编译单元内将该模板实例化。

extern template class std::vector<int>;

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。