出于某种原因,我认为C ++ 0x允许std::initializer_list
作为函数的函数参数,这些函数期望可以从这样构造的类型,例如std::vector
。但显然,它不起作用。这只是我的编译器,还是永远不会起作用?是因为潜在的重载解决问题吗?
#include <string>
#include <vector>
void function(std::vector<std::string> vec)
{
}
int main()
{
// ok
std::vector<std::string> vec {"hello", "world", "test"};
// error: could not convert '{"hello", "world", "test"}' to 'std::vector...'
function( {"hello", "world", "test"} );
}
答案 0 :(得分:54)
答案 1 :(得分:3)
这似乎是这样的:
function( {std::string("hello"), std::string("world"), std::string("test")} );
也许这是一个编译器错误,但也许你要求进行太多的隐式转换。
答案 2 :(得分:2)
副手,我不确定,但我怀疑这里发生的是转换为initializer_list是一次转换,将其转换为vector是另一种转换。如果是这种情况,那么你只能超过一次隐式转换的限制......
答案 3 :(得分:1)
这可能是编译器错误,或者您的编译器不支持std :: initializer_list。在GCC 4.5.1上测试并且它编译得很好。
答案 4 :(得分:0)
您必须指定initializer_list的类型
function(std::initializer_list<std::string>{"hello", "world", "test"} );
祝你好运