C++ C++;:在函数调用行中创建的传递数组
根据下面的代码示例,我如何实现某人所期望的结果:C++ C++;:在函数调用行中创建的传递数组,c++,arrays,C++,Arrays,根据下面的代码示例,我如何实现某人所期望的结果: // assuming: void myFunction( int* arr ); myFunction( [ 123, 456, 789 ] ); // as syntactical sugar for... int values[] = { 123, 456, 789 }; myFunction( values ); 我认为可以使用的语法会导致编译错误 如何在调用函数的行中直接定义参数数组 建议将类似您正在寻找的内容作为标准的一部分
// assuming: void myFunction( int* arr );
myFunction( [ 123, 456, 789 ] );
// as syntactical sugar for...
int values[] = { 123, 456, 789 };
myFunction( values );
我认为可以使用的语法会导致编译错误
- 如何在调用函数的行中直接定义参数数组
void function\u name(std::initializer\u list);
函数名({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() );
myFunction(std::initializer_list({123456789}).begin());
> p>不能用C++代码实现句法糖,而不是C++ 03。只有在初始化命名数组时才允许使用大括号(引用数组的元素):
int arr[] = { 0, 1, 2 };
没有别的地方。但是,使用Boost可以获得类似的效果。分配:
void f(const std::vector<int>& v)
{
}
// ...
f(boost::assign::list_of(123)(456)(789));
void f(const std::vector&v)
{
}
// ...
f(boost::assign::list_of(123)(456)(789));
您可以这样做,但您必须使用两件事:
<> >使用<代码> STD::向量< /> >(或任何其他C++ STL类)
使用编译开关(或编译器使用c++0x标准所需的任何其他东西)
错误C2143:语法错误:在'constant'之前缺少']',这样做不好,myFunction
无法知道传入数组的大小。几乎总是最好使用vector
No,在我的情况下,使用vector将是一个糟糕的选择。删除了“具有适当构造函数的类”的想法。坏主意,别听那个写这封信的傻家伙的话。
void f(const std::vector<int>& v)
{
}
// ...
f(boost::assign::list_of(123)(456)(789));