Haruyuki Mohri

毛利春幸のブログです。

代替オペレータ Alternative operator representations

C++ソースコードは、ISO 646:1983の不変文字セットを含むASCII以外の7ビット文字セットで記述することができます。
(いくつかのC++演算子と句読点には、ISO 646コードセットの外にある文字、{, }, [, ], #, \, ^, |, ~が必要)

Alternative tokens

ISO646以外の文字を使用する複数の演算子やその他のトークンには、別のスペルがあります。
言語のすべての点で、各Alternative tokensは、そのスペルを除いて(スペルリングを表示することができる文字列化演算子を除いて)、基本トークンと全く同じように動作します。

Primary 代替
&& and
&= and_eq
& bitand
| bitor
~ compl
! not
!= not_eq
|| or
|= or_eq
^ xor
^= xor_eq
{ <%
} %>
[ <:
] :>
# %:
## %:%:

&と! ISO-646では不変ですが、これらの文字を使用するトークンには、より限定的な履歴文字セットに対応する代替手段が提供されています。

if (true and true) return;
if (true or true) return;

上記のようなコードは問題無しです。

//operatorにも andが使えます。
struct _alterna{
    int i;
    _alterna(){};
    bool operator and (_alterna& asource)
    {
        return i and asource.i;
    };
};
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    _alterna a;
    _alterna b;
    a.i = 1;
    b.i = 1;
    if (a and b)
    {
        Caption = "true";
    }
}

operatorでも同じく代替が使えました。

Trigraphs (until C++17)

コメントと文字列リテラルが認識される前に、次の3文字のグループ(トリグラフ)が解析され、トリグラフの各外観が対応する主要文字に置き換えられます。

Primary Trigraph
{ ??<
} ??>
[ ??(
] ??)
# ??=
\ ??/
^ ??'
| ??!
~ ??-

元ネタURL

http://en.cppreference.com/w/cpp/language/operator_alternative