創建我如何能實現結果就像有人會根據下面的代碼示例指望它數組:C++:通過函數調用線
// assuming: void myFunction(int* arr);
myFunction([ 123, 456, 789 ]);
// as syntactical sugar for...
int values[] = { 123, 456, 789 };
myFunction(values);
我以爲語法將工作吐出編譯錯誤。
- 如何在調用該函數的行中直接定義參數數組?
創建我如何能實現結果就像有人會根據下面的代碼示例指望它數組:C++:通過函數調用線
// assuming: void myFunction(int* arr);
myFunction([ 123, 456, 789 ]);
// as syntactical sugar for...
int values[] = { 123, 456, 789 };
myFunction(values);
我以爲語法將工作吐出編譯錯誤。
你不能做到這一點語法糖與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));
作爲C++0x標準的一部分,提出了類似於您正在尋找的內容。 我不相信有其他方法可以做到(當前)。
void function_name(std::initializer_list<float> list);
function_name({1.0f, -3.45f, -0.4f});
如果您正在使用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());
你可以這樣做,但你必須使用兩件事情:
使用std::vector
(或任何其他C++ STL類)
使用-std = C++ 0x編譯開關(或其他任何你編譯器使用C++ 0x標準)。
什麼是編譯錯誤? – Maxpm 2011-02-15 23:00:32
錯誤C2143:語法錯誤:在'常量'之前缺少']' – Jarx 2011-02-15 23:02:49