C ++:传递在函数调用行中创建的数组

时间:2011-02-15 22:58:51

标签: c++ arrays

如何根据以下代码示例实现某人所期望的结果:

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

myFunction( [ 123, 456, 789 ] );

// as syntactical sugar for...

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

我认为可以解决编译错误的语法。

  • 如何直接在调用函数的行中定义参数数组?

4 个答案:

答案 0 :(得分:5)

如果你使用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 :(得分:4)

您正在寻找的内容是C++0x标准的一部分。   否则(目前)我不相信有办法。

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

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

答案 2 :(得分: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 :(得分:1)

你可以这样做,但你必须使用两件事:

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

  2. 使用 -std = c ++ 0x 编译开关(或编译器使用c ++ 0x标准的任何其他内容)。