【发布时间】:2021-11-25 19:42:58
【问题描述】:
我的代码中有一个简单的错字。我想做const std::string a = b + "bar";,但意外得到const std::string a = a + "bar"; 令我惊讶的是,即使我使用-std=c++17 -Wall 编译,这也没有从GCC 9.3.0 产生任何警告。此外,我没有收到未使用变量b 的警告。这个怎么可能?我应该将哪些标志传递给 GCC 以生成至少一些警告来发现这个问题?
#include <string>
#include <iomanip>
#include <iostream>
namespace {
const std::string b = "foo";
const std::string a = a + "bar";
}
int main()
{
std::cout << "a is " << std::quoted(a) << std::endl;
return 0;
}
【问题讨论】:
-
编译器不需要发出所有可能的警告,你可能偶然发现了 gcc 没有检测到的情况。 Clang 检测到
a和-Wuninitialized的无效使用。如果您认为 gcc 应该检测到这一点,请提交错误。
标签: c++ gcc gcc-warning