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] = { 1, 2, 3, 7, 10 }; 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-8,UTF-16,和UTF-32。除了上述char定义的变更, C++11将增加两种新的字符类别:char16_t和char32_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++ 编译器也支持这种类别。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<int> list){} }; A a = { 1, 4, 5, 6 }; |
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 i) override {
} 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>; |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。