C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

コピーの省略と戻り値の最適化とは何ですか?


コピーの省略は、特定の状況で余分な(潜在的に高価な)コピーを防ぐために、ほとんどのコンパイラーによって実装される最適化です。したがって、使用されていないオブジェクトや副作用のないオブジェクトを作成しているコードがある場合は、

struct MyStruct {
   MyStruct() {}
   MyStruct(const MyStruct&) {
      std::cout << "Copied.\n";
   }
};
MyStruct f() {
    return MyStruct();
}
int main() {
   std::cout << "Main\n";
   MyStruct obj = f();
}
出力

コンパイラと設定に基づいて、次の出力のいずれかを取得できます-

Main

Main
Copied
Copied

Main
Copied

これは、作成できるオブジェクトが予想よりも少ないことを意味します。したがって、呼び出されるコンストラクタとデストラクタの特定の数に依存することもできません。コピー/移動コンストラクタまたはデストラクタの中に重要なロジックを含めるべきではありません。それらが呼び出されることに依存することはできないからです。


  1. C#のrefパラメーターとoutパラメーターの違いは何ですか?

    参照パラメータ 参照パラメータは、変数のメモリ位置への参照です。値パラメーターとは異なり、参照によってパラメーターを渡す場合、これらのパラメーターの新しい保管場所は作成されません。 refキーワードを使用して、参照パラメーターを宣言できます。以下は例です- 例 using System; namespace CalculatorApplication {    class NumberManipulator {       public void swap(ref int x, ref int y) {     &nb

  2. C#のデータ型、値型、参照型は何ですか?

    C#のデータ型には、値型、参照型、ポインタ型の2種類があります。 値型 値型変数には、値を直接割り当てることができます。これらは、System.ValueTypeクラスから派生しています。 値型のデータ型は次のとおりです- タイプ 表す 範囲 デフォルト値 ブール ブール値 正誤問題 バイト 8ビット符号なし整数 0〜255 0 char 16ビットUnicode文字 U+0000からU+fff \ 0 10進数 有効数字28〜29桁の128ビットの正確な10進値 (-7.9 x 1028〜7.9 x 1028)/ 100〜28 0.0M