C++ 11 语言特性
新特性 | 说明 |
---|---|
nullptr,auto | NA |
for-each | 区间迭代 |
shared_ptr unique_ptr | 智能指针 |
condtion_variable,mutex,lock | 语言级线程支持 |
map,set,multimap,multiset | 有序容器 |
unordered_map,unordered_set,unordered_multiset, unordered_multimap | 无序容器 |
list,forward_list | 链表 |
queu,stack | 队列,栈 |
array,vector | 容器 |
TBD | lamda表达式 |
nullptr介绍
nullptr 的出现是为了代替NULL,比如下面的两个重载的函数
void demoFunction(int t) {
cout << "Run para as int" << endl;
}
void demoFunction(char* t) {
cout << "Run para as char*" << endl;
}
如果调用demoFunction(NULL),某些编译将NULL定义为(void)0,这就会产生歧义;
如果调用 demoFunction(nullptr) 就一定会调用到 demoFunction(char t)
auto类型推导,区间迭代
auto 可以推导任意基本类型,还可以作为函数的返回值;但是下面场景不能使用auto
- 函数的参数不能使用auto
- auto 不能推导出数组类型
//error auto Add(auto a, auto b)
auto Add(uint16_t a, uint16_t b) {
return a + b;
}
auto index = 8;
auto str = "HelloWorld";
auto ret = Add(1, 2);
cout << "index:" << index << " str: " << str << " ret:" << ret << endl;
//auto array[] = {1,2,3,4} // error auto cannot as array
区间迭代可以用于容器类型,数组类型的遍历操作;可以大幅度简化代码
示例代码
//basic usage
for (uint8_t i = 0; i < sizeof(array)/sizeof(uint16_t); i++) {
cout << "array[" << static_cast<int>(i) << "] = " << array[i] << endl;
}
for (auto t : array) {
cout << t << endl;
}
for (auto &t : array) {
cout << t << endl;
}
网友评论