【发布时间】:2012-05-17 16:28:29
【问题描述】:
我编写了一个应用程序,我经常在其中使用来自math.h 库的pow 函数。我试图重载operator^ 以使求幂更容易和更快。我写了这段代码:
#include <iostream>
#include <math.h>
using namespace std;
int operator^(int, int); // line 6
int main(int argc, char * argv[]) { /* ... */ }
int operator^(int a, int n) // line 21
{
return pow(a,n);
}
编译器(我在 Linux 上使用 g++)返回了这些错误:
main.cpp:6:23: 错误:'int operator^(int, int)' 必须有参数 类或枚举类型 main.cpp:21:27: 错误: ‘int operator^(int, int)' 必须有一个类或枚举类型的参数
【问题讨论】:
-
正如 codaddict 所说,您不能在内置类型上重载运算符,但即使可以,您也可能不想这样做。 ^ 因为按位异或是左结合的,所以
2^3^4意味着 (2^3)^4 = 4096,而不是更常见的 2^(3^4) ~= 2.4E24。 -
@PhilipC:如果你在谈论权力,那么无论关联性是什么,不带括号的
2^3^4都是一个坏主意。每个不知道关联性规则的程序员都会怀疑它实际上做了什么。 -
哦...这是运算符重载的主要规则之一,我忘记了。多么失败:/
-
@KillianDS 没错,但如果你要假设它的意图是什么,你可能会假设错误的方向。
标签: c++ compiler-errors operators operator-overloading