c – 浮点和整数模糊度
作者:互联网
我有一个函数(和一个构造函数),应该能够取整数和浮点值.实际上我希望它采用int64_t或long double,所以我想要的是,
class Foo {
public:
Foo(int64_t value=0);
Foo(long double value);
};
但是,如果我这样做并尝试Foo f = 1;编译器抱怨从int到Foo的转换是模糊的.好的,但是如果我改变第一个构造函数来获取int32_t就没有这种歧义.任何人都可以向我解释为什么会这样.
解决方法:
1文字的类型是int.构造函数都需要转换,int到int64_t vs int到long double.编译器认为它们中的任何一个都不是优选的,所以它会抱怨.通过添加Foo(int)构造函数来解决它.或者转换文字,如(int64_t)1.
标签:ambiguity,c,floating-point,integer 来源: https://codeday.me/bug/20190726/1545232.html