C++ 0x初始化列表通过引用传递

Rad*_*nsa 8 c++ c++11

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

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

与构造函数

Foo(const char *name, std::vector<const char *> &foos)
Run Code Online (Sandbox Code Playgroud)

使用此构造函数,编译器抱怨:

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]
Run Code Online (Sandbox Code Playgroud)

但是,当我将构造函数更改为

Foo(const char *name, std::vector<const char *> foos)
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.为什么第一个构造函数不起作用?我认为矢量可以在构造函数调用的位置构造并通过引用传递下来,但显然存在一些问题.有人可以解释一下吗?

谢谢

顺便说一句.我使用的是g ++版本4.4.5

编辑: 感谢下面的正确答案,我也发现了为什么我不能这样做.

Lig*_*ica 7

你不能将临时绑定到T&.

可以将临时绑定到T const&:

Foo(const char* name, std::vector<const char*> const& foos)
Run Code Online (Sandbox Code Playgroud)

但是我怀疑的理智vectorchar指针.怎么了std::string