3

const char*为什么从to的隐式转换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" };
}
4

1 回答 1

6

一个用户定义的转换序列(12.3p4)中最多允许一个用户定义的转换。

您可以使用额外的大括号来使其工作:

   Foo* foo = new Foo[1] { {"a"} };

请注意,由于clang 中的一个错误,它需要Foo有一个默认构造函数Foo::Foo(),即使它实际上不会被调用。

于 2013-04-12T10:26:48.710 回答