0x初始化程序列表

0x初始化程序列表

我试图以这种方式使用C++ 0x初始化程序列表作为构造函数调用的参数:

Foo<float> foo("Foo 1", std::vector<const char *>({ "foo A", "foo B" }) );

与构造函数
Foo(const char *name, std::vector<const char *> &foos)

使用此构造函数,编译器提示:
error: no matching function for call to Foo<float>::Foo(
    const char [5], std::vector<const char *, std::allocator<const char *> >)
note: candidates are: Foo<T>::Foo(const char *, std::vector<const char *,
    std::allocator<const char *> >&) [with T = float]

但是,当我将构造函数更改为
Foo(const char *name, std::vector<const char *> foos)

一切都按预期进行。为什么第一个构造函数不起作用?我以为可以在构造函数调用的地方构造 vector ,并通过引用传递下去,但是显然存在一些问题。有人可以解释吗?

谢谢

顺便提一句。我正在使用g++版本4.4.5

编辑:
由于下面的正确答案,我也找到了why I can't do that

最佳答案

您不能将临时绑定(bind)到T&

您可以将临时绑定(bind)到T const&:

Foo(const char* name, std::vector<const char*> const& foos)

但是我会质疑vector指针的char的合理性。 std::string有什么问题?

关于通过引用传递的C++ 0x初始化程序列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6304981/

10-14 08:26