1998年是C++标准委员会成立的第一年,以后每五年视实际需要更新一次标准,它开发于1998年并于2003年更新,统称为C++98或者C++03,国际标准化组织于2001年9月1号出版发布ISO/IEC 14882:2011,称为C++11。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。
此篇文章我只对C++11的基础知识做简要总结。
1.统一的初始化
什么叫做统一的初始化呢?例如:我们以前在往vector中插入数据的时候,只能一个元素一个元素调用push_back进行插入,现在我们可以想数组初始化的方式一样来给vector进行初始化,例如:
以前的做法(很不方便):
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int>::iterator i=v.begin();
while(i!=v.end())
{
cout<<*i<< " ";
++i;
}
}
现在我们可以对自定义类型来进行统一初始化:
vector<int> v{1,2,3,4};
C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。
2.关键字auto和decltype
在以前我们在C语言的见过auto这个关键字,使用auto定义的变量,我们成为自动变量(具有自动存储器的局部变量);
在C++11中,它被赋予了新的含义,auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 (在这里想到了我们的python大法,定义变量从来不用写类型,这些都是编译器自动去识别的) ,来看一个例子:
void test2()
{
int a=10;
auto b=10;
auto c=1.1;
auto str="hello";
//RTTI
cout<<typeid(b).name()<<endl;
cout<<typeid(c).name()<<endl;
cout<<typeid(str).name()<<endl;
}
int main()
{
test2();
system("pause");
return 0;
}
运行结果:
这好像也没有什么意思吧!!接下来就是体会auto优势的地方了
map<string, string> dict{ { "insert", "插入" }, { "sort", "