为什么从const char*
到std::string
的隐式转换在后一种情况下不起作用?
如果可能,请链接对C ++标准的引用。
变式1:
struct Foo {
Foo(const char* a) {}
};
int main() {
// works well for a "const char*" accepting constructor
Foo* foo = new Foo[1] { "a" };
}
变体2:
struct Foo {
Foo(std::string a) {}
};
int main() {
// could not convert from "const char*" to "Foo"
Foo* foo = new Foo[1] { "a" };
}
答案 0 :(得分:6)
在用户定义的转换序列(12.3p4)中,最多允许一次用户定义的转换。
您可以使用额外级别的大括号使其正常工作:
Foo* foo = new Foo[1] { {"a"} };
请注意,由于a bug in clang,它需要Foo
才能拥有默认构造函数Foo::Foo()
,即使它实际上不会被调用。