2017-03-07 12 views
3

C++で演算子をオーバーロードすると、演算子の優先順位を変更できないのはなぜですか?たとえば、乗算の前に加算を行うことが理に適っているクラスがあった場合、加算演算子を乗算より優先させるにはどうすればよいでしょうか?オペレータの優先順位C++でのオーバーロード

これは、なぜこの制限を回避するかと尋ねているので、この質問Operator overloading and precedence とは異なります。

コンパイラのカスタマイズを避け、C++ 14標準のみを使用することをお勧めします。サードパーティライブラリはOKです。

+0

* "C++で演算子をオーバーロードすると、演算子の優先順位を変更できないのはなぜですか?" * "この制限を回避する方法" *あなたはできません。 –

+0

実現可能な回避策があるのではないかと思います。 –

+3

ほとんどの場合、伝統的なコンパイラ設計では、文法とコードの構文が最初に解析されるためです。それが解析された後でさえ、C++コンパイラは各演算子がどこから来て、組み込み、または多重定義されているかを調べようとします。その時までに、馬はすでに納屋を離れています。 –

答えて

3

伝統的なコンパイラ設計では、各演算子がどこから来るのかを知る前に、まず文法を解析します。

C++よりずっと前にYACCのようなコンパイラ設計ツールが存在しました。そのため、伝統的なコンパイラは、まずソースコードの構文解析を行い、次に各演算子で何をするかを把握しようとする一般原則に従って、時間の経過とともに進化しました。だから、コンパイラはまず言語の構造を見ています。 C++標準は、実際に発明されたすべてのホイールを改革することなく、C++コンパイラを書くことを可能にしたいと考えています。

+0

C++は、コンテキストに応じて、与えられたシンボルが型か実際のオブジェクトかどうかを常に知らずに、既に解析するのは難しいです。 –

+0

Ok。わかった。回答ありがとう。 –

関連する問題