Home / ぼやきごと / 2014-01-19
2014-01-19

C++演算子の代替表現

次のごく単純なC++コードは、VC++ではコンパイルできますが、gccではコンパイルできません。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
 
 
 
-
|
|
|
!
#include <iostream>
 
int main()
{
    int not = 0;
    std::cout << not << std::endl;
    return 0;
}

実はC++規格では、一部演算子の代替表現が予約語*1になっています。

上述のコードをgccでコンパイルすると、 not が演算子として扱われるために正しくないコードになってしまうというわけです。

VC++やC言語ではこれらの代替表現を予約語として扱いません。
VC++でのコーディング中にこれらの予約語を変数名などに利用すると、C++規格に準拠したコンパイラではコンパイルできないコードになってしまいます。

なお、VC++やC言語でも同等の代替表現を利用したい場合、 <ciso646> ヘッダ(C言語では <iso646.h> ヘッダ)をインクルードすることでマクロとして定義されます。
gcc等、既に予約語としてサポートしている処理系では、これらのヘッダファイルをインクルードしても何も定義されません。

基本的にはわざわざこれらの代替表現を使う必要はないですが、 not 演算子などは案外 ! 演算子よりも見やすいかもしれませんね。

Category: [C++][プログラミング] - 2014-01-19 05:28:14

*1 より正確にいえば、 +&& などの記号と同等の扱い。