gpt4 book ai didi

c++ - 为什么编译器会为 auto x = a; 给出不同的警告信息?和自动 x(a);?

转载 作者:太空狗 更新时间:2023-10-29 21:21:50 24 4
gpt4 key购买 nike

代码很简单:

class AAA {};
AAA a;

int main() {
AAA x = a;
AAA y(a);
}

对于带有 -std=c++11 -Wall 的 g++4.8,它只对第一行给出警告:

warning: variable 'x' set but not used [-Wunused-but-set-variable]

对于带有/Za/W3的vc12,它只对第二行给出警告:

warning C4101: 'y' : unreferenced local variable

为什么编译器以不同的方式处理代码?似乎 g++ 将 y 视为used,而 vc 将 x 视为used。编译器背后的逻辑是什么?

编辑:据我测试,涉及的变量的顺序和数量无关紧要。唯一重要的是初始化的形式(复制初始化与直接初始化)。我问这个问题是为了防止编译器行为所反射(reflect)的这两种初始化形式之间的区别我不知道(我知道的区别是隐式与显式复制构造函数调用)。编译器在发出警告方面确实有很大的自由度,但归根结底,它们有自己有意义且自洽的逻辑,对吧?

最佳答案

在/W4,Visual C++ 2013 报告:

x.cpp(6) : warning C4101: 'y' : unreferenced local variable
x.cpp(5) : warning C4189: 'x' : local variable is initialized but not referenced

使用 Visual C++ 时,始终在/W4 编译(并可选择打开您关心的其他警告)。这两个警告的警告级别差异可能是由于历史原因(例如,C4109 是后来添加的,并被赋予更高的警告级别,以避免在工具链更新期间将新警告引入遗留代码)。

关于c++ - 为什么编译器会为 auto x = a; 给出不同的警告信息?和自动 x(a);?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com