Szy*_*oda 24 c++ gcc gcc-warning implicit-conversion
请考虑以下代码:
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)语句中非常方便,但对于我来说,在传递参数的情况下,它显然是错误的并且是错误的来源.
Pau*_*ans 28
您可以将foo指针的重载声明为deleted:
template <class T>
void foo(T*) = delete;
Run Code Online (Sandbox Code Playgroud)
或者更好的是,作为@Ted评论,只需声明一个vanilla重载,以便不编译任何隐式转换:
template <class T>
void foo(T) = delete;
Run Code Online (Sandbox Code Playgroud)
lub*_*bgr 16
我希望编译器在传递时发出警告
const char*而不是bool作为参数来发挥作用foo.......我想-Wall,-Wextra和-Wpedantic
您需要添加-Wconversion到编译器标志.请注意,似乎适用于clang(最近或更早版本),但不适用gcc.
如果这会触发您不想处理的太多警告,则可以选择性地启用-Wstring-conversion(clang仅限).
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |