0からの、超初心者C++相談室at TECH
0からの、超初心者C++相談室 - 暇つぶし2ch783:はちみつ餃子
24/02/04 09:54:01.38 /H29LerN.net
>>782
> {}付けるとX型に見なされてコピーコンストラクタで初期化されるで合ってますか?
いいえ。 直接初期化に該当します。
コピー (コピーコンストラクタの起動) は発生しません。
つまり X x1(f0); と書いた場合と同じということです。
ですから暗黙の変換を一段階すれば充分なのでエラーなく通ります。
> コンストラクタの引数代入時に変換追加するということでいいですか?
いいえ。 何もしません。
コンパイルを通すためには不要ですので、 X のコンストラクタは
template <class T>
X(const T& f_) : f(f_) {}
という定義だけでも問題なく動作します。
ただ、こうすると T は「あらゆる型」になりえます。
std::function<void()> に変換不可能な型も受け入れてしまうということです。
変換不可能であればいずれにしても最終的にはエラーなのですが、
X がデタラメな型も受け入れてから F に変換失敗してエラーになるよりは
特定の条件を満たす型以外を X が拒否するほうが一般的には都合がよいので
そうなるようにしたのです。
コンパイルを通すために必要なのではなく通さないための処置です。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch