std :: initializer_list作为函数参数

时间:2010-03-01 16:54:02

标签: c++ c++11 initializer-list

出于某种原因,我认为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"} );
}

5 个答案:

答案 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"} );
祝你好运