だから私はこのコードを持っています:
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 式である変換の結果は、オブジェクトを直接初期化するために使用されます。