【发布时间】:2017-07-25 15:07:34
【问题描述】:
虽然我正在编写一些代码作为语法糖,例如在 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。
EDIT:clang 甚至不支持运算符的定义。
【问题讨论】:
-
C++ 中没有
**运算符,如果您希望它像 Python 中那样进行求幂运算,您应该使用std::pow或编写自己的函数 -
@CoryKramer 但是,当使用用户定义的类型而不是 double 并将数字转换为这种类型时,此处定义的幂运算符起作用(它实际上是两个运算符,*-前缀运算符和乘法运算符!)