違いは何ですか
MyClass mc = MyClass();
と
MyClass mc;
C ++で?
最初は、一時オブジェクトをパラメーターとして使用してコピー コンストラクターを呼び出します -MyClass()
一時を作成します。
2 番目は、既定のコンストラクターを呼び出します。
実際には、ほとんどの場合、それらは同じコードに最適化されていますが、それは意味的な違いです。
Negalが述べたように、ケースは POD タイプでは少し異なります。"MyClass" が POD の場合、2 番目のスニペットは value-initialize を実行しませんがmc
、最初のスニペットは実行します。
1 つ目はコピーの初期化で、2 つ目はデフォルトの初期化です。
たとえば、次のコードはコンパイルされません。
class MyC
{
public:
MyC(){}
private:
MyC(const MyC&) {}
};
int main()
{
MyC myc = MyC();
return 0;
}
カスタム コピー コンストラクターと既定のコンストラクター。
最初に作成し、次にオブジェクトtemp-object
をc-tor without arguments
呼び出しcopy-ctor
ます(最適化は考慮されていません)。2 回目の呼び出しc-tor without arguments
、コピーなし。コンパイラの最適化では、両方のケースが等しくなります。
違いは基本型にあるので、
// initialized to something
int c;
// initialized to int() that is 0 by standard.
int c = int();
変わりはない。デフォルトの ctor 呼び出し。シンタックスシュガー)いいえコピーctor!!!!
class PPP{
public:
PPP(PPP&){
std::cout<<"PPP1"<<std::endl;
}
PPP(const PPP&){
std::cout<<"PPP2"<<std::endl;
}
PPP(){
std::cout<<"PPP3"<<std::endl;
}
};
PPP ppp = PPP();
コンソールには PPP しかありません。