yan*_*ang 1 c++ g++ multidimensional-array
在我的C++程序中,我试图用全0来初始化一个3*3*3类型的double数组.在类头文件中,我声明了一个成员
double list[3][3][3];
Run Code Online (Sandbox Code Playgroud)
当我打印出这个数组的内容时,我发现并非所有条目都是0,正如我预期的那样.例如list [1] [1] [1]的值为4.03158e-321
因此,我手动将此数组初始化为构造函数中的所有0:
list = {{{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0}}};
Run Code Online (Sandbox Code Playgroud)
这使我的程序工作,但是,我得到了编译器警告:
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Run Code Online (Sandbox Code Playgroud)
因此,我的问题是
我的编译器是g ++(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2,gcc版本4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)
在C++ 03中,您只能在定义数组时使用该初始化:
double list[3][3][3] = {{{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0}}};
Run Code Online (Sandbox Code Playgroud)
编译器警告说,根据当前标准,它不应该接受您的代码,即使它能够通过应用即将出现的标准规则来处理它,其中{...}称为外部初始化程序.
在这种特殊情况下,如果数组是成员,并且您想将其初始化为全零,则可以在C++ 0x中使用值初始化:
struct test {
double list[3][3][3];
test() : list()
{}
};
Run Code Online (Sandbox Code Playgroud)
对于POD类型的成员(其数组double是),list()初始化列表中的上面()语法意味着要对值进行初始化,这实际上意味着所有值都将设置为0
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |