【问题标题】:Why built-in types and classes are threated differently when not used?为什么内置类型和类在不使用时会被区别对待?
【发布时间】: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()};
         ^~~~

Live on coliru

【问题讨论】:

  • 它对我产生相同的警告......(未使用的变量)。我想这取决于编译器
  • 有没有一个地方可以让您在 clang 上轻松尝试并查看输出?根据我的经验,gcc 在错误中并不那么健壮。我怀疑在第一种情况下发生的事情是你只是将一个变量声明为 int (int 函数有什么作用?它给它一个随机值吗?)在第二种情况下,也许你有一个正确的对象实例化,所以变量被检测为设置?
  • @XapaJIaMnu T() 表示默认初始化类型(因此默认为内置,T::T() 为类)。所以int() 屈服于0
  • @BlackMoses 不幸的是,我目前正在使用相当过时的 GCC 并且没有叮当声。今晚我会玩一些 up2date 工具,然后回复你。感谢您对默认初始化的说明。我认为这可能只是编译器的疏忽。究竟是什么原因可能需要查看一些程序集。

标签: c++ gcc warnings unused-variables


【解决方案1】:

警告是不言自明的。代码按预期编译和运行,但编译器建议您通过删除程序中无用的变量来优化代码(声明一个稍后不会在程序中出现的变量)。

【讨论】:

  • 我知道,但是为什么int 没有产生[-Wunused-but-set-variable] 警告?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2021-06-04
  • 2011-11-15
  • 2021-01-24
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多