2016-09-27 3 views
1

왜이 코드가 2 가지 다른 경고를 유발합니까?내장되지 않은 유형 및 클래스는 사용하지 않으면 왜 다르게 처리됩니까?

class Abc 
{ 
public: 
    Abc() = default; 
    Abc(Abc const&) = default; 
}; 

int main() 
{ 
    int val1{int()}; 
    Abc val2{Abc()}; 
} 

편집 출력 :

main.cpp: In function 'int main()': 
main.cpp:10:9: warning: unused variable 'val1' [-Wunused-variable] 
    int val1{int()}; 
     ^~~~ 
main.cpp:11:9: warning: variable 'val2' set but not used [-Wunused-but-set-variable] 
    Abc val2{Abc()}; 
     ^~~~ 

Live on coliru

+0

나를 위해 같은 경고가 나타납니다 ... (사용하지 않은 변수). 나는 그것이 컴파일러에 달려 있다고 생각한다. –

+0

당신은 쉽게 clang에서 이것을 시도해보고 출력을 볼 수있는 곳이 있는가? 내 경험에 의하면 gcc는 오류가 강력하지 않습니다. 첫 번째 경우에서 일어나는 일은 변수를 int로 선언한다는 것입니다 (int fucntion은 무엇을합니까? 무작위 값을 부여합니까?) 두 번째 경우에는 어쩌면 적절한 객체 인스턴스화를 할 수 있습니다. 변수가 설정된 것으로 감지 되었습니까? – XapaJIaMnu

+0

@XapaJIaMnu'T()'는 디폴트의 초기화 타입을 사용합니다 (그래서 기본 내장, 클래스의 경우 T :: T()). 그래서 int()는'0'을 반환합니다. – xinaiz

답변

0

경고은 자명하다. 코드는 예상대로 컴파일되고 실행되지만 컴파일러는 프로그램에서 사용하지 않는 변수를 제거하여 코드를 최적화하도록 조언합니다 (나중에 프로그램에서 사용되지 않는 변수 선언).

+0

나는 그것을 알고 있지만 왜'int'는'[-Wunused-but-set-variable]'경고를 생성하지 않는가? – xinaiz

관련 문제