我已經在3個不同的編譯器(G ++,clang ++,CL.exe)中嘗試了下面的代碼片段,它們都向我報告它們不能消除重載的構造函數。現在,我知道如何修改對構造函數的調用,使其選擇一個或另一個(要麼明確表示第二個參數是無符號的文字值或明確地將其轉換)。C++在構造函數重載中的範圍和含糊不清
但是,我很好奇爲什麼編譯器會首先嚐試在構造函數中進行選擇,因爲其中一個構造函數是私有的,而對構造函數的調用發生在主函數中,該函數應該在類之外範圍。
任何人都可以啓發我嗎?
class Test
{
private:
Test(unsigned int a, unsigned int *b) { }
public:
Test(unsigned int a, unsigned int b) { }
};
int main()
{
Test t1 = Test(1,0); // compiler is confused
}
從標準文本+1 ... – 2010-05-23 16:39:43
哇。謝謝。我昨天晚上閱讀了這部分規範,不知何故錯過了這個珍聞,但那都得到了。 – 2010-05-23 17:16:22