我们刚被错字烧掉:“ 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)
您应该使用直接列表初始化语法,它禁止缩小范围:
constexpr bool number{1234}; // error: narrowing conversion of '1234' from 'int' to 'bool' [-Wnarrowing]