1.
数组,字符串,结构体声明初始化可以使用大括号
double arr[4] {1.2, 3, 3.5, 5};
string thirdstr {“hello world”};
struct inflatable {
string name;
flaot volume;
};
inflatable guest{“nihao”, 0.12};
2.
新增std::array
std::array<int, 5> ai;
数据存储在栈中,和int ai[5]一样。
vector<int> ai 数据存储在堆中,(new出的内存)
3.
基于范围的for循环
std::vector<int> vc{ 6,7,8,9,10 };
for (intx : vc) {
printf("%d\n", x);
}
for (auto & x : vc) { //引用的方式
printf("%d\n", x);
}
循环数组,容器类(array,vector,map等)
4.
thread_loacl变量,每个线程拥有独立的副本,不会相互影响。
5.
auto 被用作类型推断,不再当做自动变量;register显示的之处变量是自动的,不再表明变量是寄存器存储,保留是为了兼容性。nullptr:新增空指针表示
6.
类枚举
enum class egg { Small, Medium, Large, Jumbo}
egg e = egg::Large
底层实现为int
7.
智能指针:auto_ptr:赋值操作导致转移指针所有权a=b,b丢失所有权,再使用b将出错
share_ptr:赋值操作共享所有权,通过引用计数方式管理内存释放
unique_ptr:编译阶段禁止赋值操作,临时右值除外;当需要转移所有权时,通过std::move来操作
8.
有序容器map,set等数据结构用的红黑树树,C++11中无序容器(unordered_set)用的hash
?
9.
委托构造函数,将自己的构造函数委托给其他构造函数执行初始化过程。
class A {
A(int)();
A(string, int):A("dd",int){}
}