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

问题描述 投票:0回答:1

我们刚被错字烧掉:“ 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)

c++ boolean compiler-warnings constexpr
1个回答
-1
投票

您应该使用直接列表初始化语法,它禁止缩小范围:

constexpr bool number{1234}; // error: narrowing conversion of '1234' from 'int' to 'bool' [-Wnarrowing]
© www.soinside.com 2019 - 2024. All rights reserved.