我有一个奇怪的问题,我的工作同事所做的一个重载函数,但我们都是C++/QT新手,并且无法找出这样的原因情况。奇怪的过载函数QT/C++类型的情况
的情况如下:
我们有一个重载函数:
foo(bool arg1 = false);
foo(const QVariant &arg1, const QString &arg2 = NULL, bool arg3 = false);
在我们只有一个可选的布尔参数作为值传递的第一个; 第二个我们有一个QVariant引用,一个可选的qstring引用和一个bool。
什么发生在运行时是当我打电话例如:
foo("some_c++_string");
而是采用了一个2号和铸造的字符串的QVariant,它使用的第一个,可能忽略了的说法!奇怪的是,它甚至没有抱怨在编译时不存在foo(char *)的重载,例如! 但是,如果我们这样做:
foo(QString("some_qt_string"));
它按预期进行第二次重载。
所以,问题是:为什么在这个世界中它决定去接受一个可选的参数,甚至不是相同的类型,而不是使用第二个参数,并试图将字符串参数用作QVariant?
它可能与将参数作为参考传递并给予默认值有关,但我尝试了几种组合并总是出错。
感谢您的时间
'QString&arg2 = NULL'这真的编译没有警告或错误? – 2014-09-10 12:07:52