2010-04-20 80 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(或者你選擇的任何值)。

相關問題