ISO/IEC 14882、プログラミング言語 – C++をよく読んだ後const
、次のような単一の引数コンストラクターを持つユーザー定義型への暗黙的な変換が必要な理由はまだわかりません
#include <iostream>
class X {
public:
X( int value ) {
printf("constructor initialized with %i",value);
}
}
void implicit_conversion_func( const X& value ) {
//produces "constructor initialized with 99"
}
int main (int argc, char * const argv[]) {
implicit_conversion_func(99);
}
セクション 4 ライン 3 から開始
宣言 T t=e; の場合にのみ、式 e を暗黙的に型 T に変換できます。いくつかの発明された一時変数 t (8.5) に対して、整形式です。特定の言語構造では、式をブール値に変換する必要があります。そのような文脈で現れる式 e は、文脈上 bool に変換されると言われ、宣言が bool t(e); である場合にのみ整形式です。いくつかの発明された一時変数 t (8.5) に対して、整形式です。どちらの暗黙的な変換の効果も、宣言と初期化を実行し、変換の結果として一時変数を使用することと同じです。T が左辺値参照型 (8.3.2) の場合、結果は左辺値であり、それ以外の場合は右辺値です。式 e は、初期化で左辺値として使用される場合に限り、左辺値として使用されます。
その後、8.5 行 6 でユーザー定義型に関連する初期化子に関するセクションを見つけました。
プログラムが const 修飾された型 T のオブジェクトの既定の初期化を呼び出す場合、T は、ユーザー提供の既定のコンストラクターを持つクラス型でなければなりません。
最後に、ユーザー定義の変換について 12.3 行 2 で終了しました。
ユーザー定義の変換は、明確な場合にのみ適用されます (10.2、12.3.2)。
言うまでもなく、10.2 と 12.3.2 は私の質問に答えませんでした。
const
暗黙の変換にどのような影響があるかについて、誰かが光を当てることができますか?- を使用すると
const
、12.3 行 2 ごとに変換が「明確」になりますか? const
セクション 4 で説明した左辺値と右辺値に何らかの影響がありますか?