J'ai une fonction (et un constructeur) qui devrait être capable de prendre des valeurs entières et des valeurs à virgule flottante. En fait, je veux prendre un int64_t
ou un long double
, donc ce que je veux est,Floating point et ambiguïté entière
class Foo {
public:
Foo(int64_t value=0);
Foo(long double value);
};
Cependant, si je fais cela et essayer Foo f = 1;
le compilateur se plaint de la conversion de int
à Foo
être ambigu. Ok, mais si je change le premier constructeur pour prendre un int32_t
il n'y a pas une telle ambiguïté. Quelqu'un peut-il m'expliquer pourquoi c'est le cas.
Ah oui, merci. Logique. Je suis un peu surpris que le compilateur ne reconnaisse pas 'int64_t' comme une correspondance plus proche d'un' int' qu'un 'double' est bien. (Je suppose que parce qu'une conversion est une conversion et c'est tout ce qui l'inquiète (?)) – tjm