我有一個奇怪的問題,我的工作同事所做的一個重載函數,但我們都是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