2010-04-20 81 views
5

此问题与职位here有关。是否有可能在函数调用或构造函数调用中初始化数组?例如,foo类的构造函数需要一个大小为3的数组,所以我想调用foo({0,0,0})。我试过这个,但它不起作用。我希望能够在其他对象的构造函数初始化列表中初始化foo类型的对象,或者在不首先创建单独的数组的情况下初始化foo。这可能吗?函数调用或构造函数调用中的C++数组初始化

+0

首先你谈论数组初始化,然后你突然需要初始化一个类对象。那么你需要初始化什么:数组对象或类对象? – AnT 2010-04-20 16:15:07

+0

初始化一个类是一个特例,我作为一个例子,是我问这个问题的原因。但是,您也可以使用一个函数foo,该函数使用大小为3的数组并且想将其称为:foo({0,0,0})。我已经改变了OP,使其更明显。 – david 2010-04-20 16:21:59

+0

是的,但您仍然在问:“是否可以在不分配数组的情况下初始化数组?”。嗯,是的,这是可能的。例如,'int a [10] = {5}'初始化一个数组而不分配它,就像你问的那样。然而,这看起来并不像你真正感兴趣的。 – AnT 2010-04-20 16:24:35

回答

5

不符合当前标准。它会在C++ 11

在GCC,您可以使用一个投来强制时间的创作,但它不是标准的C++(C99)是可能的:

typedef int array[2]; 
void foo(array) {} // Note: the actual signature is: void foo(int *) 
int main() { 
    foo((array){ 1, 2 } ); 
} 
+0

这适用于C99,但不适用于C++ 03(在C++ 0x中都没有 - 这是一个复合文字)。 – 2010-04-20 16:45:48

+0

代码是可以的(macports)gcc最高4.6;海湾合作委员会4.7报告错误:采取临时阵列的地址。 – 2012-08-20 10:24:01

+0

C++ 11是当前的标准,所以这个答案需要更新。 – 2013-08-31 15:57:08

0

如果您的设计允许,你可以考虑将数据包装到一个类中,并在默认的构造函数中初始化为0(或者你选择的任何值)。

相关问题