2011-02-15 154 views
5

創建我如何能實現結果就像有人會根據下面的代碼示例指望它數組:C++:通過函數調用線

// assuming: void myFunction(int* arr); 

myFunction([ 123, 456, 789 ]); 

// as syntactical sugar for... 

int values[] = { 123, 456, 789 }; 
myFunction(values); 

我以爲語法將工作吐出編譯錯誤。

  • 如何在調用該函數的行中直接定義參數數組?
+0

什麼是編譯錯誤? – Maxpm 2011-02-15 23:00:32

+0

錯誤C2143:語法錯誤:在'常量'之前缺少']' – Jarx 2011-02-15 23:02:49

回答

3

你不能做到這一點語法糖與C++代碼,而不是在C++ 03。其中括號是允許的,指的是一個陣列的元件的唯一場所,是在初始化命名陣列:

int arr[] = { 0, 1, 2 }; 

無處。但是,您可以實現與Boost.Assign類似的效果:

void f(const std::vector<int>& v) 
{ 
} 

// ... 
f(boost::assign::list_of(123)(456)(789)); 
3

作爲C++0x標準的一部分,提出了類似於您正在尋找的內容。 我不相信有其他方法可以做到(當前)。

void function_name(std::initializer_list<float> list); 

function_name({1.0f, -3.45f, -0.4f}); 
3

如果您正在使用C(C99,特別是),你也可以使用文字這裏的化合物:

myFunction((int []) {123, 456, 789}); 

但是是不是C++的一部分(你的編譯器可能仍然支持他們,雖然)。在C++ 0x中,你可以使用初始化列表,但它們不會衰減到指針(不是使用原始指針是一個好主意)。

但如果你改變myFunction的的簽名void myFunction(const int* arr),你就可以做做作呼叫

myFunction(std::initializer_list<int>({123, 456, 789}).begin()); 
1

你可以這樣做,但你必須使用兩件事情:

  1. 使用std::vector(或任何其他C++ STL類)

  2. 使用-std = C++ 0x編譯開關(或其他任何你編譯器使用C++ 0x標準)。