如何在不使用C ++ 11功能的情况下初始化类中的数组?

时间:2014-09-16 01:53:27

标签: c++ c++11

如何在不使用初始化列表(我认为是c ++ 11特性)的情况下在c ++中初始化类中的数组?我的编译器(VS2013)完全不支持c ++ 11,遗憾的是。

1 个答案:

答案 0 :(得分:1)

Visual Studio 2013支持Initializer lists,这意味着您可以轻松完成:

--C++11: default initialization using {}
int n{};      --zero initialization: n is initialized to 0
int *p{};     --initialized to nullptr
double d{};   --initialized to 0.0
char s[12]{}; --all 12 chars are initialized to '\0'
string s{};   --same as: string s;
char *p=new char [5]{}; 
vector<int> vi {1,2,3,4,5,6};
vector<double> vd {0.5, 1.33, 2.66}; 
etc

或C ++ 11中支持的其他形式 如果你不喜欢它,你也可以使用旧的方法,如:

您可以按照以下步骤操作:

int bar [5] = { 10, 20, 30 };

这会创建一个这样的数组:

---------------------------------
|  10  |  20  |  30  |  0  |  0  |
---------------------------------

你也可以:

int baz [5] = { }; 

转换为:

-------------------------------
|  0  |  0  |  0  |  0  |  0  |
-------------------------------

或者你可能有:

int foo [] = { 16, 2, 77, 40, 12 };

转换为:

----------------------------------
|  16  |  2  |  77  |  40  |  12  |
----------------------------------

如果你正在处理类及其对象,你可以简单地调用你的构造函数:

Point aPoint[3] = {
   Point( 3, 3 ),
   Point( 13, 6 ),
   Point( 32, 98 )
};

所有以前的规则也适用于此表格。 如果声明一个静态数组,它们将根据它们的默认类型进行初始化(例如int默认为0等)