重载operator ^为整数类型

Kac*_*iej 3 c++ compiler-errors operator-overloading operators

我写了,我经常使用的应用程序pow功能的math.h库.我试图超载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);
}
Run Code Online (Sandbox Code Playgroud)

编译器(我在Linux上使用g ++)给我这些错误:

main.cpp:6:23:错误:'int operator ^(int,int)'必须有一个类的参数或枚举类型main.cpp:21:27:error:'int operator ^(int,int)'必须有一个类或枚举类型的参数

cod*_*ict 9

您不能使操作员超载以仅在内置类型上操作.

至少有一个参数必须是用户定义的类或枚举类型(或对其中一个的引用),如编译器错误消息中明确说明的那样.


Luc*_*ore 6

我试图重载operator ^以使取幂更容易和更快

你拼错了混乱,因为它肯定不是更快,也不容易.如果你这样做,任何维护你代码的人都会讨厌你.

幸运的是,C++至少需要一个参数是用户定义的类型,所以你不能这样做.

  • 但即使对于用户定义的类型,它也是一个糟糕的选择.`^'与相对较低的优先级保持关联.对于取幂,它应该与极高的优先级相关联. (2认同)
  • 即使对于用户定义的类型,`^`也会令人困惑,因为它已经有了不同的定义语义.对于用户定义的类型,你可以使用`**`或`^*`(一元`*`返回一个帮助类,它定义`*`或`^`来表示'pow`),但是你仍然有杰里提出的优先权和约束力问题.使用额外的辅助类来解决这些问题意味着括号无法覆盖优先级,这是完全不可接受的. (2认同)