3

整数値と浮動小数点値をとることができるはずの関数(およびコンストラクター)があります。実際、私はそれがint64_tまたはを取りたいlong doubleので、私が欲しいのは、

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

ただし、これを実行して試してみると、コンパイラはからへの変換があいまいであるとFoo f = 1;文句を言います。わかりましたが、最初のコンストラクターを変更して、そのようなあいまいさはありません。なぜこれが当てはまるのか、誰かが私に説明できますか?intFooint32_t

4

1 に答える 1

8

1リテラルの型はintです。どちらのコンストラクターも、intからint64_tへの変換とintからlongdoubleへの変換が必要になります。コンパイラはどちらも好ましいとは思わないので、文句を言います。Foo(int)コンストラクターを追加して解決します。または、(int64_t)1のようにリテラルをキャストします。

于 2010-10-03T19:56:02.007 に答える