C ++の関数呼び出しでは、引数は対応するパラメーターにコピーされます。これは初期化ですか、それとも割り当てですか?
3 に答える
引数の受け渡しのセマンティクスは、初期化のセマンティクスです。つまり、クラスのコピー/移動コンストラクターが呼び出されます。
次に、引数は値によってコピー構築されます(つまり初期化)。
初期化:(元のドラフトを確認してください)
5.2.2関数呼び出し
関数が呼び出されると、各パラメーターは対応する引数で初期化されます。[このような初期化は、相互に不確定に順序付けられます]関数が呼び出されるとき、オブジェクトタイプを持つパラメーターは、完全に定義されたオブジェクトタイプを持つ必要があります。[これでも、パラメーターを不完全なクラス型へのポインターまたは参照にすることができます。ただし、値渡しパラメーターのクラス型が不完全になるのを防ぎます。]パラメーターの初期化中に、実装は、関連する引数の変換や一時的なものの構築を組み合わせることにより、余分な一時的なものの構築を回避できます。パラメータの初期化で。パラメータの有効期間は、パラメータが定義されている関数が戻ったときに終了します。各パラメーターの初期化と破棄は、呼び出し元の関数のコンテキスト内で行われます。[コンストラクタ、変換関数、またはデストラクタのアクセスは、呼び出し元の関数の呼び出し時にチェックされます。関数パラメーターのコンストラクターまたはデストラクターが例外をスローした場合、ハンドラーの検索は呼び出し元の関数のスコープで開始されます。特に、呼び出された関数に、例外を処理できるハンドラーを持つfunction-try-blockがある場合、このハンドラーは考慮されません。]