我對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