将整数隐式转换为类'BigInt'

Rud*_*132 1 c++ int casting

我已经创建了这个类BigInt,并且它派生了转换构造函数,例如

BigInt::BigInt(int l):InfInt(l){}
Run Code Online (Sandbox Code Playgroud)

然而,当我做这样的事情时:

for(i=0;BigInt::pow(2,i+1)<exponent;i++);
Run Code Online (Sandbox Code Playgroud)

编译器对我大喊:

error: ambiguous overload for ‘operator+’ (operand types are ‘BigInt’ and ‘int’)
Run Code Online (Sandbox Code Playgroud)

我知道解决这个问题的一个简单方法就是在所有内容之前添加(BigInt),如下所示:

for(i=0;BigInt::pow(2,i+(BigInt)1)<exponent;i++);
Run Code Online (Sandbox Code Playgroud)

但是这段代码看起来很难看,有点难以阅读,并且很难打字.有没有办法告诉编译器立即执行此操作(如标题所示)?如果没有,那就不太戏剧化了.
哦,对不起,如果已经问过这个问题,但是我已经尝试在google上搜索我自己的解决方案了,并且找不到任何可以帮助我的方法.(我几乎能找到关于operator int()等等的东西,我已经知道了).

Pet*_*ker 6

你也有operator int(),不是吗?那,加上采用a的构造函数会int产生歧义.编译器可以BigInt::operator+()通过将int参数转换为a BigInt来调用,或者可以+通过将BigInt对象转换为a 来调用内置函数int.标记operator int() explicit以消除这种模糊性.这将导致在少数情况下转换失败,可以通过添加强制转换来解决.这是你能做的最好的事情; 没有转换优先规则可以使编译器BigInt看作最大的整数类型.