在C++11中,大多数的基础数据类型都可以直接初始化,可以不通过构造函数来初始化。还有一些仍旧是类外初始化。由于可能存在对C++11支持的程度不同,以及编译器厂商是否对C++进行了扩展。下面是我的测试平台:
#include <iostream>
using namespace std;
class MyClass
{
public:
static const int a = 3;
const double b = 3.14;
//为了保持静态属性成员是属于整个类的,C++11的做法和以前一样,依旧在类外定义并初始化
static int c; //声明c
double d = 100.001;
char str[33] = "Hello World!";
int num[10] = { 0 };
private:
};
int MyClass::c = 10;//在这里定义并初始化
int main()
{
MyClass C;
cout << C.a << endl;
cout << C.b << endl;
cout << C.c << endl;
cout << C.d << endl;
cout << C.str << endl;
cout << C.num[3] << endl;
return 0;
}
不仅能通过编译,而且输出结果也没有任何问题。这样的初始化方式写起来也非常顺畅,比旧标准好得多。
学习新的标准是非常有用的,这样最重要的是能让你避免对新的代码产生一些误判。尤其是当新的标准所支持的操作,在旧标准中并不支持的时候,你就很可能发生误判。
在Microsoft Visual Studio Community 2019中,其实已经支持了C++14,C++17以及C++最新的草案标准