【发布时间】:2017-02-04 23:58:22
【问题描述】:
为什么这段代码会导致 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()};
^~~~
【问题讨论】:
-
它对我产生相同的警告......(未使用的变量)。我想这取决于编译器
-
有没有一个地方可以让您在 clang 上轻松尝试并查看输出?根据我的经验,gcc 在错误中并不那么健壮。我怀疑在第一种情况下发生的事情是你只是将一个变量声明为 int (int 函数有什么作用?它给它一个随机值吗?)在第二种情况下,也许你有一个正确的对象实例化,所以变量被检测为设置?
-
@XapaJIaMnu
T()表示默认初始化类型(因此默认为内置,T::T()为类)。所以int()屈服于0。 -
@BlackMoses 不幸的是,我目前正在使用相当过时的 GCC 并且没有叮当声。今晚我会玩一些 up2date 工具,然后回复你。感谢您对默认初始化的说明。我认为这可能只是编译器的疏忽。究竟是什么原因可能需要查看一些程序集。
标签: c++ gcc warnings unused-variables