雖然我將一些代碼編寫爲像python和其他語言中已知的power-operator的實現一樣的語法糖,但運算符定義可以,但操作數與運算符簽名匹配的表達式產生一個錯誤,因爲操作員從未被定義過。有沒有一種方法(編譯器選項)爲內置類型實現新的運算符?重載內置類型的運算符
#include <iostream>
#include <cmath>
template<typename t_Float>
struct PowerTmp {
t_Float value;
};
PowerTmp<double> operator*(double f) {
return {f};
};
double operator*(double l, PowerTmp<double> r) {
return std::pow(l, r.value);
};
int main() {
std::cout << 10.5 *PowerTmp<double>{2.0} << '\n';
cout << 10.5 ** 2.0 << '\n'; //error
};
我正在使用mingw。
編輯:clang甚至不支持運算符的定義。
有一個在C++中沒有'**'經營者,如果你期待的是要冪像Python中,你應該使用'STD :: pow'或編寫自己的函數 – CoryKramer
@CoryKramer但是,當使用用戶定義的類型而不是double並將數字轉換爲此類型時,此處定義的權力運算符起作用(它實際上是兩個運算符,即* -prefix運算符和乘法運算符!) – cmdLP