3

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" };
}
4

1 に答える 1

6

ユーザー定義の変換シーケンス (12.3p4) では、最大 1 つのユーザー定義の変換が許可されます。

余分なレベルの中括弧を使用して機能させることができます。

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

clang のバグのため、実際には呼び出されなくてもFooデフォルトのコンストラクターが必要であることに注意してください。Foo::Foo()

于 2013-04-12T10:26:48.710 に答える