请考虑以下代码:
void foo(bool parameter) {
std::cout << parameter << "\n";
}
int main() {
foo("const char *argument");
}
Run Code Online (Sandbox Code Playgroud)
我希望编译器在传递时发出警告const char*而不是bool作为参数来发挥作用foo.
但GCC暗中转换它.我想-Wall,-Wextra和-Wpedantic,但这些问题的警告.是否有可以捕获这种隐式转换的标志(无效的参数类型)?
忽略这个函数有一个类型参数的事实,bool有些人可能会认为这是一种糟糕的代码风格.我无法重构那部分.
该标准刚刚提到这种隐式转换将会发生:
可以将整数,浮点,无范围枚举,指针和指针到成员类型的prvalue转换为bool类型的prvalue.
我知道这种行为在if (ptr)语句中非常方便,但对于我来说,在传递参数的情况下,它显然是错误的并且是错误的来源.