是否在c++中正确过载电源
Overload power with correctly in c++?
在c++中,我实现了一个integer
类,并将operator ^
重载为幂函数。
integer integer::operator^ (const integer& rhs){
return integer(pow(this->.i, rhs.i));
}
这对于两个操作数是正确的。
integer i1, i2, i3 ;
i4 = i1 ^ i2 ^ i3;
i4
的值在数学上是错误的,因为结合性需要从右到左。我该如何解决这个问题?如何更改关联性?
我得到了合理的答案,我学到了:
-We can't change associativity or priority of an operator.
-Good is Not to overload operators to do something conceptually different to
the built-in versions
-Even compiler can't support; it hard to implement!
您不能通过重载来更改C++中运算符的关联性或优先级。这些规则是硬连接到语言语法中的。
C++标准说(§13.5.6,强调矿):
运算符函数应为非静态成员函数或非成员函数,并具有至少一个参数,其类型为类、对类的引用、枚举或对枚举无法更改运算符的优先级、分组或操作数运算符=,(一元)&,和,(逗号),为每种类型预先定义,可以更改[…]
^
运算符不仅是左关联的,而且它的优先级也很低。幂运算符的正确优先级应该高于乘法(因此该表中的优先级为4或更好),但它的优先级为10——这意味着即使是加法和减法也要在它之前进行评估。1 + 2 ^ 3 * 4
将被解析为(1 + 2) ^ (3 * 4)
,而数学上正确的幂运算符应被解析为1 + (2 ^ 3) * 4
。
如果一个运算符的关联性或优先级可以被修改,那么一个巨大的语法混乱就会随之而来。我的个人意见是,你不应该试图让^
运算符过载,把它用作电源运算符。我宁愿在类上创建一个power
方法。
相关文章:
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 电源功能模块化操作
- 为什么 icc 为简单的主电源生成奇怪的组件?
- 为什么这段代码不直接使用 C++ 幂函数?有人可以帮助我使用此代码中的电源函数吗?
- 窗口中的文件损坏 电源故障后操作系统
- 需要一种更好的方法来编写电源函数
- Qt:自动生成电源点报告或可编辑的pdf报告
- 电源模板编码
- 在C 中有电源数字总和
- 如何使用Arduino将外部电源用于接近传感器
- 生产力 Microsoft Visual Studio 2012 的电源工具不起作用
- Xcode-如何控制macbook USB端口的电源
- 是否在c++中正确过载电源
- 使用 winAPI 设置窗口的高性能电源计划C++
- 检测笔记本电脑上的电源按钮按下
- 重定向电源外壳输出 C++
- 将两个图像堆栈的非电源加载到 3D 纹理 OpenGL C++
- 生成一定长度的电源设置
- 使用C++查找系统电源状态
- 使用 Qt 通过 GPIB 对电源进行编程