C ++でのコピーの省略と戻り値の最適化とは何ですか?
コピーの省略は、コピーの省略とも呼ばれます。これは、コンパイラの最適化手法の1つです。オブジェクトの不要なコピーを回避します。現在のほとんどのコンパイラは、このCopyElision手法を使用しています。
1つのサンプルコードを使用して、どのように機能するかを見てみましょう。
サンプルコード
#include <iostream> using namespace std; class MyClass { public: MyClass(const char* str = "\0") { //default constructor cout << "Constructor called" << endl; } MyClass(const MyClass &my_cls) { //copy constructor cout << "Copy constructor called" << endl; } }; main() { MyClass ob = "copy class object"; }
出力
Constructor called
では、コピーコンストラクターが呼び出されない理由について説明しましょう。
したがって、オブジェクトが構築されているときに、1つの一時オブジェクトが生成され、実際のオブジェクトにコピーされます。したがって、内部的には次のようになります。
MyClass ob = "copy class object";
として機能します。
MyClass ob = MyClass("copy class object");
C ++コンパイラは、この種のオーバーヘッドを回避します。
-
C++の++iとi++の違いは何ですか?
++のサフィックスバージョンとプレフィックスバージョンには大きな違いがあります。 プレフィックスバージョン(つまり、++ i)では、iの値がインクリメントされ、式の値はiの新しい値になります。したがって、基本的には、最初にインクリメントしてから、式に値を割り当てます。 postfixバージョン(つまり、i ++)では、iの値はインクリメントされますが、式の値はiの元の値です。したがって、基本的には、最初に式に値を割り当ててから、変数をインクリメントします。 例 理解を深めるために、いくつかのコードを見てみましょう- #include<iostream> using name
-
C ++の符号付きおよび符号なしキーワードとは何ですか?
C ++のすべての数値タイプには、符号を付けることも付けないこともできます。たとえば、正の整数のみを表すintを宣言できます。特に指定がない限り、すべての整数データ型は符号付きデータ型です。つまり、正または負の値をとることができます。 unsignedキーワードは、符号なしの変数を宣言するために使用できます。 例 #include<iostream> using namespace std; int main() { unsigned int i = -1; int x = i; cout <&l