浮点和整数模糊度

时间:2010-10-03 19:52:08

标签: c++ floating-point integer ambiguity

我有一个能够获取整数和浮点值的函数(和构造函数)。实际上我希望它采用int64_tlong double,所以我想要的是,

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

但是,如果我执行此操作并尝试Foo f = 1;,编译器会抱怨从intFoo的转换模糊不清。好的,但如果我将第一个构造函数更改为int32_t,则不存在这种歧义。任何人都可以向我解释为什么会这样。

1 个答案:

答案 0 :(得分:8)

1个文字的类型是int。构造函数都需要转换,int到int64_t vs int到long double。编译器认为它们中的任何一个都不是优选的,所以它会抱怨。通过添加Foo(int)构造函数来解决它。或者转换文字,如(int64_t)1。