2013-07-26 2 views
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. 컴파일러 최적화입니까, 아니면 무슨 일이 일어 났는가에 대한 간단한 오해입니까?

미리 감사드립니다.

+2

예, 컴파일러 최적화입니다. – ForEveR

+0

컴파일러는 액세스 가능한 복사본 생성자 여야하지만 여기에서 복사본을 삭제할 수 있습니다. 이것은 "있는 그대로"규칙을 위반할 수있는 최적화입니다. [this GoTW] (http://www.gotw.ca/gotw/036.htm)를 참조하십시오. – juanchopanza

+0

[copy elision] (http://en.cppreference.com/w/cpp/language/copy_elision)에 대해 읽어보십시오. –

답변

0

int에서 A으로 생성자 A(int i)을 통한 암시 적 변환이 여기에서 발생합니다.

따라서 컴파일러에서 최적화를 수행합니다.

첫 번째 생성자에 대해 explicit 키워드를 사용하면 컴파일되지 않습니다.