當我將enum指定爲第二個參數時,爲什麼VisualC++(2008)會混淆'C2666:2重載有類似的轉換',但是當我定義一個bool類型時卻不會。具有類似轉換的構造函數重載
不應該類型匹配已經排除第二個構造函數,因爲它是'basic_string'類型?
#include <string>
using namespace std;
enum EMyEnum { mbOne, mbTwo };
class test {
public:
#if 1 // 0 = COMPILE_OK, 1 = COMPILE_FAIL
test(basic_string<char> myString, EMyEnum myBool2) { }
test(bool myBool, bool myBool2) { }
#else
test(basic_string<char> myString, bool myBool2) { }
test(bool myBool, bool myBool2) { }
#endif
};
void testme() {
test("test", mbOne);
}
我可以通過指定一個參考'即ie。 basic_string & myString',但不是如果它是'const basic_string & myString'。
也通過「test((basic_string)」test「,mbOne)顯式調用;」也適用。
我懷疑這與每個表達式/類型通過固有的'!= 0'被解析爲bool有關。
好奇徵求意見都一樣:)
重載解析的最佳描述之一可以在[C++模板:完全指南]的附錄B中找到(http://www.amazon.com/Templates-Complete-Guide-David-Vandevoorde/dp/0201734842 )。本書其餘部分也非常出色,但該附錄提供了一個非常簡潔和易於參考的重載解析規則列表。 – 2010-05-28 01:50:42