gpt4 book ai didi

使用 bool 和 const char 重载的 c++ 函数会在没有警告的情况下产生歧义 (MSVC2012)

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:27 24 4
gpt4 key购买 nike

我有两个返回值错误处理函数:

static void handleError(int error, const std::string& message, bool bShowAll = false);

static void handleError(int error, const std::string& prefix, const std::string& message, bool bShowAll = false)

我遇到问题的这个函数的调用如下所示:

handleError(errro, "moduleA", "query failed");

现在问题出现了,上面的调用导致调用第一个变体而不是第二个变体,其传递参数 bShowAll 解析为“true”。我最好的猜测是“const char[]”与“bool”类型兼容。

我曾尝试更改函数的顺序(通过对第二个函数使用前向声明),但它根本没有帮助。 c++ 提供了哪些其他选项来解决这个问题? (所有类型转换都不起作用 - 使用 bool 以外的其他类型,例如带有枚举符号等价物的枚举类型,用于 bool 的设计目的进入良好的操作。我认为默认值参数 init 是项目这为此打开了大门,但 MSVC 2012 本身并没有暗示这种歧义,尽管我运行它时警告级别高达 #4。)

注意:我认为 stack-overflow 也是关于学习如何把事情做得好的、聪明的,同时也是为了向他人学习:在计算和计算机语言领域了解事物是如何设计的。

最佳答案

问题是"query failed"const char[]类型,需要转换成std::string handleError 被调用。这是一个用户定义的转换,并且比标准转换(从 const char[]const char* 和到 bool)具有更差的等级.

您可以让它明确地传递一个std::string,以避免隐式的用户定义转换。

handleError(errro, std::string("moduleA"), std::string("query failed"));

或者从 C++14 开始

using namespace std::string_literals;
handleError(errro, "moduleA"s, "query failed"s);

关于使用 bool 和 const char 重载的 c++ 函数会在没有警告的情况下产生歧义 (MSVC2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52255010/

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