我们刚刚被一个拼写错误搞得焦头烂额:“constexpr bool maxDistance=10000;"
gcc 和 clang 都会在没有警告的情况下编译此文件。
这里真正的错误是变量不应该是 bool 类型,而应该是整数类型。
我们如何确保将来收到编译器警告?
#include <iostream>
constexpr bool number = 1234;
int main(int argc, char* argv[])
{
std::cout << number + 10000 << std::endl; // prints 10001.
return number;
}
这里的错误是变量声明的类型错误,但是 clang 和 gcc 都没有给出警告。
gcc -Wall -std=c++14 test.cpp -lstdc++
clang -Wall -std=c++14 test.cpp -lstdc++
(使用 gcc 5.4.0 和 clang 3.8.0)
注意:我已经了解了一个可能的编译标志:-Wint-in-bool-context
然而,这似乎没有在我使用的版本(5.4.0)和 clang(3.8.0)中实现。
这是正确的方法吗?
你应该使用直接列表初始化语法,它禁止缩小:
constexpr bool number{1234}; // error: narrowing conversion of '1234' from 'int' to 'bool' [-Wnarrowing]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)