#blog2navi() *C++演算子の代替表現 [#q55e4301] 次のごく単純なC++コードは、VC++ではコンパイルできますが、gccではコンパイルできません。 #code(c){{ #include <iostream> int main() { int not = 0; std::cout << not << std::endl; return 0; } }} 実はC++規格では、一部演算子の代替表現が予約語になっています。 実はC++規格では、一部演算子の代替表現が予約語((より正確にいえば、 @code{+}; や @code{&&}; などの記号と同等の扱い。))になっています。 -[[CとC++の演算子:C++の演算子の代替表現 - Wikipedia>Wikipedia:CとC++の演算子#C++の演算子の代替表現]] 上述のコードをgccでコンパイルすると、 @code{not}; が演算子として扱われるために正しくないコードになってしまうというわけです。 VC++やC言語ではこれらの代替表現を予約語として扱いません。~ VC++でのコーディング中にこれらの予約語を変数名などに利用すると、C++規格に準拠したコンパイラではコンパイルできないコードになってしまいます。 なお、VC++やC言語でも同等の代替表現を利用したい場合、 <ciso646> ヘッダ(C言語では <iso646.h> ヘッダ)をインクルードすることでマクロとして定義されます。~ gcc等、既に予約語としてサポートしている処理系では、これらのヘッダファイルをインクルードしても何も定義されません。 基本的にはわざわざこれらの代替表現を使う必要はないですが、 @code{not}; 演算子などは案外 @code{!}; 演算子よりも見やすいかもしれませんね。 RIGHT:Category: [[[C++>ぼやきごと/カテゴリ/C++]]][[[プログラミング>ぼやきごと/カテゴリ/プログラミング]]] - 2014-01-19 05:28:14 ---- RIGHT:&blog2trackback(); #comment(above) #blog2navi()