2010-10-03 82 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