3

だから私はこのコードを持っています:

struct Foo {
    Foo() { cout << "default\n"; }
    Foo(const long long) { cout << "implicit\n"; }
};

struct Bar {
    Bar(const short param) : param(param) {}
    operator long long() const { return static_cast<long long>(param); }
    const short param;
};

Foo foo = Bar(13)暗黙のキャストを使用してから、変換コンストラクターを使用したと思っていたでしょう。しかし、それはエラーです:

エラー: からBar非スカラー型への変換がFoo要求されました

ただし、これは正常に機能しますFoo foo(Bar(13))。暗黙のキャストが明示的な変換の構築に使用されるのに、暗黙の変換の構築には使用されないのはなぜですか?

https://en.cppreference.com/w/cpp/language/copy_initializationから得たルールは次のとおりです。

変換コンストラクターが使用された場合は prvalue 式である変換の結果は、オブジェクトを直接初期化するために使用されます。

4

2 に答える 2