如何将r值std :: vector传递给函数?

Arc*_*man 3 c++

我想要做的是std::vector通过直接在调用中放入一个数组来调用包含参数的函数.我不想创建一个向量然后将它传递给函数,但我想在函数中放置大括号.这是一般的想法:

void doSomething(std::vector<int> arr)
{
    std::cout << arr[0] << std::endl;
}

int main()
{
    doSomething({ 1, 2, 3 });
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误.我也试过使用lambda表达式,我不太熟悉,但这里是:

doSomething([]()->std::vector<int>{ return{ 1, 2, 3 }; });
Run Code Online (Sandbox Code Playgroud)

这不起作用.这是我不想要的:

std::vector<int> a {1, 2, 3};
doSomething(a);
Run Code Online (Sandbox Code Playgroud)

那我该怎么做呢?我真的希望我写的不是完全愚蠢的.

πάν*_*ῥεῖ 6

您可以使用从初始化列表初始化的临时向量:

 doSomething(std::vector<int>{1, 2, 3 });
Run Code Online (Sandbox Code Playgroud)

Live Demo

  • @martin嗯,使用对临时对象的引用不是一个好主意,除非它是一个“const”引用,可以保证临时对象的生命周期延长直到函数调用完成。使用“const”引用可以避免复制,是的,在我建议的代码中创建了一个副本。 (2认同)