c++ 11 一些新特性
2015-07-27 15:33
471 查看
1.新类型
c++11新增了long long 和 unsigned long long 以支持64位(或更宽)的整形;新增了类型 char16_t 和 char32_t , 以支持16位 和 32位的字符表示。
2.统一的初始化
c++11扩大了用大括号括起的列表(初始化列表)的适用范围, 使其可用于所有内置类型和用户定义的类型(即类对象),使用初始化列表时,可添加符号(=),也可不添加。
如: int x = {5};
short quar[5] {4, 5, 2, 76, 1};
初始化语法还可以用于new表达式中:
int* ar = new int[4] {2,4,6,7}; //c++11
创建对象时,也可以使用大括号(而不是圆括号) 括起的列表来调用构造函数:
注意使用g++编译的时候要加上 -std=c++11 。
3. std::initializer_list
c++11提供了模板类initializer_list, 可将其用作构造函数的参数。 如果类有接受initializer_list作为参数的构造函数, 则初始化列表语法就只能用于该构造函数。 列表中的元素必须是同一种类型或可转换为同一种类型。 STL容器提供了将initializer_list作为参数的构造函数:
vector<int> a1(10); //uninitializerd vector with 10 elements
vector<int> a2{10}; //initializer-list, a2 has 1 element set to 10
vector<int> a3{4,6,1} //3 elements set to 4,6,1
头文件initializer_list提供了对模板类initializer_list的支持。 这个类包含成员函数begin() 和 end(), 可用于获悉列表的范围。 除用于构造函数外,还可将initializer_list用作常规函数的参数:
c++11新增了long long 和 unsigned long long 以支持64位(或更宽)的整形;新增了类型 char16_t 和 char32_t , 以支持16位 和 32位的字符表示。
2.统一的初始化
c++11扩大了用大括号括起的列表(初始化列表)的适用范围, 使其可用于所有内置类型和用户定义的类型(即类对象),使用初始化列表时,可添加符号(=),也可不添加。
如: int x = {5};
short quar[5] {4, 5, 2, 76, 1};
初始化语法还可以用于new表达式中:
int* ar = new int[4] {2,4,6,7}; //c++11
创建对象时,也可以使用大括号(而不是圆括号) 括起的列表来调用构造函数:
#include <iostream> class A { public: A(int m, int n) : m_(m), n_(n) {}; void print() { std::cout<<"m_: "<<m_<<" n: "<<n_<<std::endl; } private: int m_; int n_; }; int main() { A p(1,2); //old style A q{3,4}; //c++11 A r = {5,6}; //c++11 p.print(); q.print(); r.print(); return 0; }
注意使用g++编译的时候要加上 -std=c++11 。
3. std::initializer_list
c++11提供了模板类initializer_list, 可将其用作构造函数的参数。 如果类有接受initializer_list作为参数的构造函数, 则初始化列表语法就只能用于该构造函数。 列表中的元素必须是同一种类型或可转换为同一种类型。 STL容器提供了将initializer_list作为参数的构造函数:
vector<int> a1(10); //uninitializerd vector with 10 elements
vector<int> a2{10}; //initializer-list, a2 has 1 element set to 10
vector<int> a3{4,6,1} //3 elements set to 4,6,1
头文件initializer_list提供了对模板类initializer_list的支持。 这个类包含成员函数begin() 和 end(), 可用于获悉列表的范围。 除用于构造函数外,还可将initializer_list用作常规函数的参数:
#include <initializer_list> #include <iostream> double sum(std::initializer_list<double> i1); int main() { double total = sum({2.5, 3.1, 4}); std::cout << total << std::endl; } double sum(std::initializer_list<double> i1) { double tot = 0; for (auto p = i1.begin(); p!=i1.end(); p++) { tot += *p; } return tot; }
相关文章推荐
- POJ 1860 Currency Exchange Bellman-Ford算法求单源最短路径并判断是否有正权回路
- nyoj 100 1个数
- 对C++中虚函数的应用所带来的隐藏和重写的探讨
- c语言读写文件
- C语言之函数调用11—递归法求Hermite函数
- C语言中字符串操作之 strstr()
- C++中的函数指针和函数对象总结
- 【leetcode c++】107 Binary Tree Level Order Traversal II
- 【leetcode c++】104 Maximum Depth of Binary Tree
- 【leetcode c++】102 Binary Tree Level Order Traversal
- LeetCode 206. Reverse Linked List(迭代和递归两种实现)
- [LeetCode] Maximal Square
- 【leetcode c++】101 Symmetric Tree
- 【leetcode c++】100 Same Tree
- C++空类的大小
- 【leetcode c++】88 Merge Sorted Array
- POJ3159差分约束最短路径问题
- Qt C++中的关键字explicit
- C语言中的逻辑右移和算术左移
- [C++]类的定义 class