浮点和整数模糊度

tjm*_*tjm 3 c++ floating-point integer ambiguity

我有一个函数(和一个构造函数),应该能够取整数和浮点值.事实上,我希望它采取一个int64_t或一个long double,所以我想要的是,

class Foo {
    public:
    Foo(int64_t value=0);
    Foo(long double value);
};
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,并尝试Foo f = 1;编译器抱怨从转换intFoo是不明确的.好的,但是如果我改变第一个构造函数来取一个int32_t没有这种歧义.任何人都可以向我解释为什么会这样.

Han*_*ant 8

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

  • 啊,是的,谢谢.说得通.我有点惊讶的是,编译器不会将`int64_t`识别为与`int`的匹配,而不是'double`.(我想是因为转换是一种转换,所有这一切都令人担心(?)) (2认同)