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));