void PrintNow(const std::vector<int> &v)
{
std::cout << v[0] << std::endl;
}
std::vector<int>().push_back(20); // this line generates no complains
PrintNow(std::vector<int>().push_back(20)); // error
来自VS2010 Sp1:
eror C2664:'PrintNow':无法将参数1从'void'转换为'const std :: vector <_Ty>&'
问:我们可以将临时向量传递给函数吗?
4 回答
在C 11中你可以做到:
VS2010尚不支持C 11的这一部分 . (gcc 4.4和clang 3.1做)
如果您只需要一个元素,那么在C 03中您可以:
如果您需要多个元素,那么我认为没有任何一个行解决方案 . 你可以这样做:
或者你可以写一个varargs函数,它接受一个int列表并返回一个向量 . 除非你经常使用这个,但我不知道它是值得的 .
生成错误是因为
std::vector::push_back
函数的返回类型是void
:请尝试以下方法:
上面的代码使用了
std::vector
类的一个可用构造函数:问题是
std::vector::push_back()
返回void
,而不是你不能将临时函数传递给函数 .如果所有元素具有相同的值,则您有一个符合您需求的构造函数: