我是一个有用的助手,可以帮您进行文本翻译。以下是需要翻译的内容:
我在使用一位同事创建的一个重载函数时遇到了奇怪的问题,但我们都是C++/QT新手,不知道出现这种情况的原因。
具体情况如下:
我们有一个重载函数:
foo(bool arg1 = false);
foo(const QVariant &arg1, const QString &arg2 = NULL, bool arg3 = false);
第一个函数只有一个可选的布尔参数作为值;第二个函数有一个QVariant引用、一个可选的QString引用和一个布尔值。
运行时的情况是这样的,例如当我调用:
foo("some_c++_string");
不要使用第二种方法并将字符串转换为QVariant,而是使用第一种方法并忽略参数!奇怪的是,例如在编译时,它甚至不抱怨没有重载foo(char *)的存在!但如果我们执行以下操作:
foo(QString("some_qt_string"));
正如预期的那样,它进入了第二个重载函数。
那么问题是:为什么它会决定选择接受一个不同类型的可选参数的重载函数,而不是使用第二个重载函数并尝试将字符串参数作为QVariant使用?
这可能与传递引用和给它们默认值有关,但我尝试了几种组合,总是出错。
感谢您的时间。