【发布时间】:2019-08-26 07:33:31
【问题描述】:
我寻找 g++ 的警告编译标志,它会阻止从 bool 到 double 的静默转换。
This answer 涉及更广泛的将 int 转换为 double 的问题。这个问题在那里被驳回,因为它被认为是无损转换并且完全合法。
但是,由于bool 具有比简单整数的另一种语义含义,我希望从 bool 到 double 的隐式转换会发出警告。
我试过了:-Wall -Wextra -pedantic -Wconversion
在以下代码上没有任何成功(没有发出警告):
#include <iostream>
int foo(double var){
return static_cast<int>(var);
}
int main(){
std::cout << foo(5) << std::endl;
std::cout << foo(5.1) << std::endl;
std::cout << foo(false) << std::endl; // here I want the warning
return 0;
}
我使用 g++ 4.9.2,但建议使用更高版本的答案是完全可以接受的。
谢谢。
【问题讨论】:
-
您可以重载
foo以获取布尔值,然后不实现重载。这将导致链接器错误。如果你想要编译器错误,那么模板可以给你。 -
这是针对特定情况的可能解决方案,但我寻求一种通用解决方案来防止无意转换
标签: c++ compilation g++