我试图以这种方式使用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
编辑: 感谢下面的正确答案,我也发现了为什么我不能这样做.
你不能将临时绑定到T&.
您可以将临时绑定到T const&:
Foo(const char* name, std::vector<const char*> const& foos)
Run Code Online (Sandbox Code Playgroud)
但是我怀疑的理智vector的char指针.怎么了std::string?