私はしばしば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);
}
コンパイラは、(私はLinux上でのG ++を使用)私にこれらのエラーを返しました:
main.cpp:6:23: error: ‘int operator^(int, int)’ must have an argument of class or enumerated type main.cpp:21:27: error: ‘int operator^(int, int)’ must have an argument of class or enumerated type
codaddictによれば、組み込み型で演算子をオーバーロードすることはできませんが、できる場合でもそうしたくないかもしれません。 ^はビットアトリビュートxorが左結合型であるため、通常の2 ^(3^4)〜= 2.4E24ではなく、(2^3)^ 4 = 4096を意味します。 –
@PhilipC:あなたが力について話しているなら、括弧を付けずに '2^3^4'と書くことは、連想性が何であれ、悪い考えです。連想性の規則を心に気づかないすべてのコーダーは、実際に何をするのか疑問に思うでしょう。 – KillianDS
ああ...これは演算子のオーバーロードの主なルールの1つで、私はそれを忘れてしまった。何が失敗するのですか:/ –