次のコードを検討してください。
#include <iostream>
using namespace std;
class loc
{
int longitude, latitude;
public:
loc() {}
loc(int lg, int lt)
{
longitude = lg;
latitude = lt;
}
loc(const loc& l)
{
cout << "a" << endl;
}
loc operator = (loc op2)
{
longitude = op2.longitude;
latitude = op2.latitude;
return *this;
}
loc operator+(loc op2);
};
loc loc::operator+(loc op2) {
loc temp;
temp.longitude = op2.longitude + longitude;
temp.latitude = op2.latitude + latitude;
return temp;
}
int main()
{
loc ob1(10, 20), ob2( 5, 30);
ob1 = ob1 + ob2;
return 0;
}
コマンド: を使用してこのプログラムをコンパイルするg++ file.cpp
と、出力は次のようになりました。
a
hello
次に、コマンドを使用してこのプログラムをコンパイルします: g++ -fno-elide-constructors file.cpp
、出力は次のとおりです。
a
a
a
hello
私の質問は:
最初のケースで、2 つのコピー コンストラクターが省略されているのはなぜですか?
とにかく、どのコピーコンストラクターが省略されていますか? = 演算子または + 演算子には別のメカニズムがありますか
編集
正しい代入演算子またはコピー コンストラクターがどのように見えるべきかを知っています。代入演算子を修正するのではなく、上記のケースで 2 つのコピー コンストラクターが省略されている理由を答えてください。