2010-10-03 127 views
3

我有一個函數(和一個構造函數)應該能夠採取整數和浮點值。事實上,我希望它採取int64_tlong double,所以我想的是,浮點和整數模糊

class Foo { 
    public: 
    Foo(int64_t value=0); 
    Foo(long double value); 
}; 

但如果我這樣做,並嘗試Foo f = 1;編譯器抱怨從intFoo是曖昧的轉換。好吧,但如果我改變第一個構造函數採取int32_t沒有這樣的歧義。任何人都可以向我解釋爲什麼會出現這種情況。

回答

8

1文字的類型是int。任何一個構造函數都需要一個轉換,int int64_t vs int long double。編譯器不認爲它們中的任何一個都是可取的,所以它抱怨。通過添加一個Foo(int)構造函數來解決它。或鑄造文字,如(int64_t)1。

+2

啊,是的,謝謝。說得通。我有點驚訝,儘管編譯器不認爲'int64_t'與'int'比'double'更接近匹配。 (我猜是因爲轉換是一種轉換,這就是它所擔心的(?)) – tjm 2010-10-03 20:10:23