코드 스 니펫이 발생하여 copy-constructor을 호출 할 것이라고 생각했지만 대조적으로 단순히 일반 생성자를 호출했습니다. 다음은 B ob = "copy me";
개념적으로 리터럴에서 B
을 생성한다는 것을 발견하고 구조 ob
을 복사 한 어떤 코드복사 생성자가이 경우에 호출되지 않는 이유는 무엇입니까?
#include <iostream>
using namespace std;
class B
{
public:
B(const char* str = "\0")
{
cout << "Constructor called" << endl;
}
B(const B &b)
{
cout << "Copy constructor called" << endl;
}
};
int main()
{
B ob = "copy me";
return 0;
}
http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization –
왜 복사 생성자를 호출하기를 기대할 수 있습니까? ''copy me ''는'const char [8]'이고'B'가 아닙니다 ... –
@ H2CO3 복사 초기화이기 때문에. 그것은 이론적으로 그것을 호출해야합니다. –