C++11 新特性
来源:互联网 发布:中英文翻译软件 编辑:程序博客网 时间:2024/06/06 00:34
1.模板表达式中的空格可以被省略
vector<list<int> >; // 每个C++版本都可以vector<list<int>>; // 从C++11开始就可以
2.空指针
C++11中提供了一种专门的空指针类型std::nullptr_t,你可以用nullptr来代替以前的NULL引起的一些问题:
void f(int);void f(void*);f(0); // 调用f(int)f(NULL); // 如果NULL是0就调用f(int)f(nullptr); // 调用f(void*)
3.自动类型转换
auto i = 42; // i 的类型是 intdouble f();auto d = f(); // d 的类型是 double
4.统一初始化列表
C++11中支持大括号来进行初始化:
int values[] { 1, 2, 3 };std::vector<int> v { 2, 3, 5, 7, 11, 13, 17 };std::vector<std::string> cities {"Berlin", "New York", "London", "Braunschweig", "Cairo", "Cologne"};std::complex<double> c{4.0,3.0}; // 等价于c(4.0,3.0)
并且使用{}初始化会自动赋予初始化值
int i; // i 未定义值int j{}; // j 初始化为0int* p; // p 未定义值int* q{}; // q 初始化为nullptr
注意的是,使用{}初始化列表会禁止收窄(narrowing)转换。
int x1(5.3); // 允许, 但是x1会赋值为5int x2 = 5.3; // 允许, 但是x2会赋值为5int x3{5.0}; // 错误: 收窄转换int x4 = {5.3}; // 错误: 收窄转换char c1{7}; // 允许:即使7是int,但不属于收窄转换char c2{99999}; // 错误:收窄转换std::vector<int> v1 { 1, 2, 4, 5 }; // 允许std::vector<int> v2 { 1, 2.3, 4, 5.6 }; // 错误:double收窄为int
5.可变形参
void print (std::initializer_list<int> vals){ for (auto p=vals.begin(); p!=vals.end(); ++p) { // 处理一系列值 std::cout << *p << "\n"; }}print ({12,3,5,7,11,13,17}); //利用初始化列表传递一系列值给实参
可以用explict关键字给它限制:
class P{ public: P(int a, int b) { ... } explicit P(int a, int b, int c) { ... }};P x(77,5); // 允许P y{77,5}; // 允许P z {77,5,42}; // 允许P v = {77,5}; // 允许 (隐式转换是允许的)P w = {77,5,42}; // 必须显式转换
6.foreach循环
std::vector<double> vec;...for ( auto& elem : vec ) { elem *= 3;}
注意该循环过程中的elem赋值会调用拷贝构造函数,为了避免无谓的开销,尽量使用const引用。
待续。。。
0 0
- C+11 新特性
- [C++]C++11新特性
- 【C++】 C++11新特性
- 【C++】了解C++11新特性
- C++:C++11新特性详解(1)
- 12c新特性
- Objective-C新特性
- Objective-C新特性
- Objective-C新特性
- Objective-C新特性
- 12C新特性
- C#7.0新特性
- Objective-c新特性
- 【C/C++】C++11新特性:std::bind
- Delphi2009/C++Builder2009新特性
- C 99的新特性
- Objective-C 新特性
- Objective-C的新特性
- Android图片缓存加强版(LruCache+DiskLruCache+软引用)
- 析构函数 private 、virtual的作用
- WCF入门教程——通信过程(二)
- Android自定义控件模仿iOS滑块SwitchButton
- java synchronized详解
- C++11 新特性
- ViewPager详解(三)——自动轮播图片小于三张的问题解决
- j2EE连接数据库的增删改查操作
- @weakify, @strongify 详解
- shell之进程管理
- .net特性
- Spark Shuffle过程理解
- C++异常处理(多态实现机制)
- Mybatis多对多关联查询