2016-09-27 10 views
1

Почему этот код приводит к двум различным предупреждениям?Почему встроенные типы и классы обрабатываются по-разному, когда они не используются?

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

 Смежные вопросы

  • Нет связанных вопросов^_^