Her*_*rtz 3 c++ initializer-list c++11
为什么从隐转换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" };
}
Run Code Online (Sandbox Code Playgroud)
变式2:
struct Foo {
Foo(std::string a) {}
};
int main() {
// could not convert from "const char*" to "Foo"
Foo* foo = new Foo[1] { "a" };
}
Run Code Online (Sandbox Code Playgroud)
用户定义的转换序列(12.3p4)中最多允许一个用户定义的转换.
您可以使用额外级别的大括号来使其工作:
Foo* foo = new Foo[1] { {"a"} };
Run Code Online (Sandbox Code Playgroud)
请注意,由于clang中的错误,它需要Foo具有默认构造函数,Foo::Foo()即使它实际上不会被调用.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |