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

How do I initialize an array within a class without using C++11 Features?

本文关键字:情况下 初始化 数组 功能 C++11      更新时间:2023-10-16

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

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 ''
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等)进行初始化