3

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

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

但是,如果我这样做并尝试Foo f = 1;编译器会抱怨从模棱两可的int转换Foo。好的,但是如果我将第一个构造函数更改为采用 aint32_t就没有这种歧义。谁能向我解释为什么会这样。

4

1 回答 1

8

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

于 2010-10-03T19:56:02.007 回答