0
具有float的C++模數運算符。 我知道模%運算符只能在兩個操作數都是整數的情況下使用,如果一個人試圖使用浮點數,它會導致編譯錯誤。具有使用#define和自己的類型float的C++模數運算符
error C2296: '%' : illegal, left operand has type 'double'
但是,我在某些情況下,我沒有控制和代碼做float float導致編譯問題。
因此,我試圖創建我自己的dbl極簡主義類來實現相同。
// testMod.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "math.h"
class DBL{
public:
bool lastError;
float dbl;
DBL()
{
dbl = 0.0;
}
DBL(float b)
{
dbl = b;
}
/*float operator % (float t)
{
return fmod(dbl, t);
}*/
operator float()
{
return dbl;
}
friend float operator % (DBL a, DBL b);
};
float operator % (DBL a, DBL b)
{
return fmod(a.dbl, b.dbl);
}
#define float DBL
int main(int argc, _TCHAR* argv[])
{
float temp;
float a = 3.24;
float b = 4.32;
temp = a % b ;
temp = 0;
temp = a % b;
temp = 3.14 % 5.01; // compilation error here
return 0;
}
這不能編譯。我希望能夠使用隱式轉換,但似乎沒有這樣做。如果只處理%自己並取決於其他所有內容的默認轉換,那麼最小化轉換也是足夠的嗎?
爲什麼不使用在標準頭文件''(或C頭文件'')中聲明的函數'fmod()'? –
Peter
你只需要*拿*控制。否則什麼都不會編譯。 – EJP
您不能在內置類型之間重載運算符,也不能讓它們隱式轉換。沒有辦法解決這個事實,即除了重寫它之外,有人制作了不合格的代碼。 – nwp