【问题标题】:Floating point and integer ambiguity浮点数和整数歧义
【发布时间】:2011-04-20 13:31:43
【问题描述】:

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

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

但是,如果我这样做并尝试Foo f = 1;,编译器会抱怨从intFoo 的转换不明确。好的,但是如果我将第一个构造函数更改为采用int32_t,则没有这种歧义。谁能给我解释一下为什么会这样。

【问题讨论】:

    标签: c++ floating-point integer ambiguity


    【解决方案1】:

    1字面量的类型是int。任何一个构造函数都需要转换,int 到 int64_t 与 int 到 long double。编译器认为它们中的任何一个都不可取,因此它会抱怨。通过添加 Foo(int) 构造函数来解决它。或转换文字,如 (int64_t)1。

    【讨论】:

    • 啊,是的,谢谢。说得通。我有点惊讶的是,编译器没有将int64_t 识别为与intdouble 更接近的匹配。 (我猜是因为转换就是转换,这就是它所担心的全部(?))
    猜你喜欢
    • 2011-01-04
    • 2017-07-26
    • 2011-01-10
    • 2012-02-11
    • 2015-01-20
    • 1970-01-01
    • 2017-11-16
    • 2010-12-26
    • 2011-04-19
    相关资源
    最近更新 更多