T
이 C++ 클래스라고 가정하고 T a = b;
을 수행하면 복사 생성자 또는 할당 연산자는 무엇입니까?C++ : "T a = b"- 복사 생성자 또는 대입 연산자?
현재 실험에서 복사 생성자가 호출되었지만 이유를 이해하지 못한다는 것을 보여줍니다.
#include <iostream>
using namespace std;
class T {
public:
// Default constructor.
T() : x("Default constructor") { }
// Copy constructor.
T(const T&) : x("Copy constructor") { }
// Assignment operator.
T& operator=(const T&) { x = "Assignment operator"; }
string x;
};
int main() {
T a;
T b = a;
cout << "T b = a; " << b.x << "\n";
b = a;
cout << "b = a; " << b.x << "\n";
return 0;
}
$ g++ test.cc
$ ./a.out
T b = a; Copy constructor
b = a; Assignment operator
고마워요!
T a = b;
이
T a(b);
그것은 초기화하지 할당의 것과 같은 효과가 있기 때문에
대 =, 그러한 객체는 생성자의 따라서 사용을 존재하지 않습니다. 'b = a'에서 b라는 객체가 이미 존재하고 이전 값을 a에서 복사 한 값으로 대체 (할당)하고 있으므로 대입 연산자가 사용됩니다. – YoungJohn
'하지만 왜 이해가 안되 죠. '그 행동이 달라야한다고 생각하는 이유가 있습니까? –
관련 : http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization –