我对C++如何在需要做数学时强制类型转换有疑问。铸造上出乎意料的行为
下面的代码就是这样(即只有投射为int而不投射为双倍)才能正常工作和构建。如果我定义ENABLE_DOUBLE_CAST
不会构建并投诉operator*
。你知道为什么吗?
我的疑惑是2:
- 为什么不操作转换为加倍,但是它使用了一个双间的乘法为int。是因为隐含演员吗?
- 为什么WITH转换使双重启用(增加更清晰的语法),没有考虑到?
感谢
AFG
class CA{
int _m;
public:
CA(int a, int b){
_m=a*b;
}
operator int(){
std::cout<< "(CA int cast)" ;
return _m;
}
#ifdef ENABLE_DOUBLE_CAST
operator double(){
std::cout << "(CA double cat)";
return 2.3 * _m;
}
#endif
};
int main(int argc, const char** argv){
CA obj_2(10,20);
double total_1 = 100.0 * obj_2;
double total_2 = obj_2 * 100.0;
return 0;
}
您已经听说过用户定义的转换,但没有用户定义的'operator *'?你需要定义后者。事实上,你必须定义两个版本的'operator *'。 – Nawaz