我试图以这种方式使用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/