gpt4 book ai didi

c++ - 在 GCC 中避免或警告从 const char* 到 bool 的隐式转换

转载 作者:IT老高 更新时间:2023-10-28 12:59:46 29 4
gpt4 key购买 nike

考虑以下代码:

void foo(bool parameter) {
std::cout << parameter << "\n";
}

int main() {
foo("const char *argument");
}

我希望编译器在将 const char* 而不是 bool 作为参数传递给函数 foo 时发出警告。

但 GCC 会隐式转换它。我尝试了 -Wall-Wextra-Wpedantic,但这些都没有发出警告。有没有可以捕捉到这种隐式转换(无效参数类型)的标志?

忽略函数具有 bool 类型的参数这一事实,有些人可能会认为这是不好的代码风格。我无法重构那部分。

标准只是提到了这样一个 implicit conversion会发生:

A prvalue of integral, floating-point, unscoped enumeration, pointer, and pointer-to-member types can be converted to a prvalue of type bool.

我知道这样的行为在if (ptr)语句中很方便,但对我来说,在传递参数的情况下,这显然是错误的,也是bug的来源。

最佳答案

您可以将指针的 foo 重载声明为 deleted:

template <class T>
void foo(T*) = delete;

或者更好的是,正如@Ted 评论的那样,只需声明一个 Vanilla 重载即可不编译任何隐式转换:

template <class T>
void foo(T) = delete;

关于c++ - 在 GCC 中避免或警告从 const char* 到 bool 的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515792/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com