Rik*_*eed 2 c++ boolean compiler-warnings constexpr
我们只是被错字弄糊涂了:“ 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;
}
Run Code Online (Sandbox Code Playgroud)
这里的错误是变量声明的类型错误,但是clang和gcc均未给出警告。
gcc -Wall -std=c++14 test.cpp -lstdc++
clang -Wall -std=c++14 test.cpp -lstdc++
Run Code Online (Sandbox Code Playgroud)
(使用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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |