0
다음 코드 : I 출력이 될 것으로 예상하면서복사기의 컴파일러 최적화?
#include <iostream>
using namespace std;
struct A {
A(int a) { cout << "cast "; }
A(const A& a) { cout << "copy " ;}
};
int main() {
int x = 0;
A a = x;
return 0;
}
는 출력 cast
을 제공합니다 cast copy
. 컴파일러 최적화입니까, 아니면 무슨 일이 일어 났는가에 대한 간단한 오해입니까?
미리 감사드립니다.
예, 컴파일러 최적화입니다. – ForEveR
컴파일러는 액세스 가능한 복사본 생성자 여야하지만 여기에서 복사본을 삭제할 수 있습니다. 이것은 "있는 그대로"규칙을 위반할 수있는 최적화입니다. [this GoTW] (http://www.gotw.ca/gotw/036.htm)를 참조하십시오. – juanchopanza
[copy elision] (http://en.cppreference.com/w/cpp/language/copy_elision)에 대해 읽어보십시오. –