Почему этот код приводит к двум различным предупреждениям?Почему встроенные типы и классы обрабатываются по-разному, когда они не используются?
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()};
^~~~
Он производит такое же предупреждение для меня ... (неиспользуемая переменная). Я думаю, это зависит от компилятора –
Есть ли место, где вы легко можете попробовать это на clang и посмотреть результат? По моему опыту, gcc не так прочен в ошибках. Я подозреваю, что в первом случае происходит то, что вы просто объявляете переменную как int (Что делает функция int fucntion? Предоставляет ли она случайное значение?) Во втором случае, возможно, у вас есть надлежащее создание объектов, поэтому переменная определяется как установленная? – XapaJIaMnu
@XapaJIaMnu 'T()' инициализирует инициализацию типа по умолчанию (поэтому значения по умолчанию для встроенных модулей, 'T :: T()' для классов). Поэтому 'int()' дает значение '0'. – xinaiz