ぼやきごと/2014-01-19/C++演算子の代替表現 の変更点


#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: &#x5b;[[C++>ぼやきごと/カテゴリ/C++]]&#x5d;&#x5b;[[プログラミング>ぼやきごと/カテゴリ/プログラミング]]&#x5d; - 2014-01-19 05:28:14
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()