今天学习C++11标准的部分内容。
C++11标准,原名C++0x。它是目前C++编程语言的最新正式标准(ISO/IEC 14882:2011)。
它将取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:1998公开于1998年,第二版于2003年更新,分别通称C++98以及C++03,两者差异很小)。
C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。C++ 标准委员会计划在2010年8月之前完成对最终委员会草案的投票,以及于2011年3月3召开的标准会议完成国际标准的最终草案。最终于2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。此次标准为13年第一次重大修正。
1、初始化列表
int i = 0; //以前的写法
int j(1); //以前的写法
int m = { 3 }; //新的写法
int n{ 2 }; //新的写法
//新的写法要注意一个东西,不能出现精度丢失的问题
double d = 3.14;
//int m1{ d }; //错误,这样写不行
//int m1={ 3.14 }; //错误,这样写不行
int m2{ (int)d }; //这样写可以
2、空指针的写法
int *p = NULL; //以前的写法
int *p1 = nullptr; //新的写法
3、自动类型auto
auto a = 1;//根据值去匹配类型
//auto a1 = 2, a2 = 3.12;//错误:当声明多个变量时,类型必须全部相同
auto p = new char[4];//p根据值匹配为char*
注意:
//auto在函数返回值使用,注意在后面加上尾置类型,原因是函数返回值比函数的参数先确定类型
auto Myadd(int a, int b)->int
{
return a + b;
}
4、decltype将变量的类型声明认为是表达式指定的类型
int i = 1;
decltype(i) j;//这句的意思,可以理解为定义了一个j变量,并认为j变量是int类型
decltype((i)) q = j;//再加一个圆括号,代表为引用的声明,所以要初始化赋值
//上面这行就是 int &q=j;
5、新的for规则,和迭代的机制一样
std::string srcString = “abcd”;
for (auto c : srcString)//c为什么定义成自动类型,是因为c会是一个迭代器
cout << c << endl;
int my_array[5] = { 1, 2, 3, 4, 5 };
for (int &x : my_array)
{
x *= 2; //把数组的值翻倍
}
6、类型重定义
typedef int HELLO;//旧方法
using HAHA = int; //新方法
typedef int(*pFun)(int, int);
using PFUN = int(*)(int, int);
7、default在类中的应用
class CA
{
public:
CA(int a) { this->a = a; }
//CA() {}//旧方法
//新方法,编译器合成一个默认的什么都不干的构造函数;在类内定义,内联函数
//CA() = default;
CA();
int a;
};
CA::CA() = default;//在类外定义,普通函数
8、类中直接初始化成员数据
class CA
{
public:
int a = 0; //这里直接初始化
};
9、构造函数委托
//构造函数委托,有多个构造函数,其中的一个调用另一个构造,这叫委托
//委托发生构造函数成员初始化列表当中
class MM
{
public:
int mk;
int mk1;
MM(int k) { mk = k; }
MM() : MM(10) { mk1 = 20; } //这里就是委托
};
10、final禁止重写
class CA
{
public:
//可以只给基类的成员数据赋值
virtual void run() final //该函数在派生类中不允许重写(必须是虚函数)
{
cout << “abc” << endl;
}
virtual void run1() {}
};
(2017-04-03 www.vsppc.com)
评论前必须登录!
注册