【发布时间】:2014-09-10 11:50:11
【问题描述】:
我的一位同事制作的重载函数遇到了一个奇怪的问题,但我们都是 C++/QT 新手,无法弄清楚这种情况的原因。
情况如下:
我们有一个重载的函数:
foo(bool arg1 = false);
foo(const QVariant &arg1, const QString &arg2 = NULL, bool arg3 = false);
在第一个中,我们只有一个可选的 bool 参数作为值传递; 第二个我们有一个 QVariant 引用,一个可选的 qstring 引用和一个 bool。
运行时发生的事情是我打电话的时候:
foo("some_c++_string");
它没有使用第二个并将字符串转换为 QVariant,而是使用第一个并且可能忽略了参数!奇怪的是,它甚至没有抱怨在编译时不存在 foo(char *) 的重载! 但如果我们这样做:
foo(QString("some_qt_string"));
它按预期进入第二个重载。
所以,问题是:为什么它决定去接受一个甚至不是相同类型的可选参数的重载,而不是使用第二个并尝试将字符串参数用作 QVariant?
这可能与将参数作为参考传递并赋予它们默认值有关,但我尝试了几种组合,但总是出错。
感谢您的宝贵时间
【问题讨论】:
-
QString &arg2 = NULL这样编译真的没有警告或错误吗?
标签: c++ qt overloading