C++における一時オブジェクト/常と非常&左右値/の説明について
1287 ワード
一.まず、ローカルオブジェクトが作成された関数から離れると消滅し、呼び出し関数を返した後も生存することはできないので、この場合、コンパイルシステムは呼び出し関数の式に名前のない一時オブジェクトを作成し、この一時オブジェクトの生存周期は関数呼び出しの式にのみ存在します.returnオブジェクトとは,実際にはコピーコンストラクタを呼び出してそのオブジェクトの値を一時オブジェクト(オブジェクト初期化オブジェクト)にコピーし,最終的には一時オブジェクトを返す.変数が返される場合、処理プロセスは類似していますが、コンストラクション関数は呼び出されません.二.説明1.無名オブジェクトと一時オブジェクトの一時オブジェクトが表示される場合があり、無名オブジェクトが表示されない(1)一時オブジェクトが表示されない場合、いくつかの方法が実装されると、定義された一時オブジェクトtmpが表示されます.(2)戻り値コピーによって作成されたテンポラリオブジェクト,実パラメトリックコピーによって構築されたテンポラリオブジェクトなどは,無名オブジェクトには見えない.2.テンポラリオブジェクトは、ローカルオブジェクトよりも生存時間が長い相対的に、テンポラリオブジェクトの生存周期は、関数呼び出しでの式で、ローカルオブジェクトは、その関数を作成するときに消滅する.一時オブジェクトが生成された場合は、次のような場合があります.
関数の戻り値がクラスオブジェクトの場合、関数の実行が完了したら一時オブジェクトを作成し、呼び出し元に戻ります.
実パラメトリックコピーコンストラクションパラメータ
関数のパラメータがクラスのオブジェクトである場合、関数を呼び出すときに、パラメータの結合に関与するシェイプが使用されます.この場合、メモリにローカルオブジェクトを新しく作成し、実パラメータを新しいオブジェクトにコピーします.
オブジェクト初期化オブジェクト3.C++に内蔵されているタイプは直接付与されます.三.常に非常に概説&左右の値1.左の値として使用すると、左の値が無名の一時オブジェクト、定数などではないことを変更できます.
a++、stringクラスを記述した人は知っているはずですが、後++は無名の一時オブジェクトを返し、決定された値を無名の一時オブジェクトに与えることは明らかにできません.2.c++の左と右をまとめるhttp://www.cnblogs.com/catch/p/3500678.htmlこの博文は非常に詳しく紹介されているので,読者は参考にすることができる.
関数の戻り値がクラスオブジェクトの場合、関数の実行が完了したら一時オブジェクトを作成し、呼び出し元に戻ります.
実パラメトリックコピーコンストラクションパラメータ
関数のパラメータがクラスのオブジェクトである場合、関数を呼び出すときに、パラメータの結合に関与するシェイプが使用されます.この場合、メモリにローカルオブジェクトを新しく作成し、実パラメータを新しいオブジェクトにコピーします.
オブジェクト初期化オブジェクト3.C++に内蔵されているタイプは直接付与されます.三.常に非常に概説&左右の値1.左の値として使用すると、左の値が無名の一時オブジェクト、定数などではないことを変更できます.
a++ = b;//error, 1 error C2106: “=”:
a++、stringクラスを記述した人は知っているはずですが、後++は無名の一時オブジェクトを返し、決定された値を無名の一時オブジェクトに与えることは明らかにできません.2.c++の左と右をまとめるhttp://www.cnblogs.com/catch/p/3500678.htmlこの博文は非常に詳しく紹介されているので,読者は参考にすることができる.