如何让编译器警告这是一个无效的布尔值?

2024-01-09

我们刚刚被一个拼写错误搞得焦头烂额:“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(使用前将#替换为@)

如何让编译器警告这是一个无效的布尔值? 的相关文章

随机推荐