きたの"と"や"や"代替のトークンを導入したC++?
質問
私はこの 素敵な作品 からReddit.
いち and
や or
ている"代替のトークン"を &&
や ||
私に気づかされます。もちろん、みなさんが、 ジ-グラフトのグラフ, ものの、 and
や or
?いつからですか?ここ最近の規格とは何ですか?
私は確認でVisual C++2008年ということ以外のものの構文エラーになります。かがでしょうか。
解決
MSVCを使用すると、拡張機能を無効にする/Za
オプションを使用する場合のみ、キーワードとして、それらをサポートしています。これは、少なくともVC7.1(VS2003)から真です。
あなたはそれらはiso646.h
を含めることでマクロとしてサポートすることができます。
私の推測では、彼らは、デフォルトではそれらのキーワード作ることはあまりにも多くの既存のコードを壊す(と彼らが正しい場合、私は驚かないだろう)と信じている。
このはSOのどこかに、ここ数週間前の質問で説明しましたが、私はこいつを見つけるためのSOの検索やGoogleを取得することはできません。
他のヒント
から、C++11標準 2.6/ Alternative tokens
:
- 代替のトークンの表現は一部の事業者とpunctuators.
- すべての言語、各代替のトークンの動作と同じるとともに、それぞれ次のトークンを除き、そのスペル.セットのトークンが定義されたテーブル2.
表2-代替のトークン
alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
<% { | and && | and_eq &=
%> } | bitor | | or_eq |=
<: [ | or || | xor_eq ^=
:> ] | xor ^ | not !
%: # | compl ~ | not_eq !=
%:%: ## | bitand & |
実際の質問に答えるために:
これは最初のC ++標準で定義されていました。
C ++標準を参照してください。委員会のドラフト#2は、 で自由に利用可能ですA> のftp://ftp.research.att .COM / DIST / C ++のstd / WP / CD2 / body.pdf に、それは非権威だが、時代遅れの、およびいくつかの場所では部分的に正しくありません。具体的には、セクション2.5で、の代替トークンは、以下が定義されている
Alternative Primary <% { %> } <: [ :> ] %: # %:%: ## and && bitor | or || xor ^ compl ~ bitand & and_eq &= or_eq |= xor_eq ^= not ! not_eq !=
正直けれども、私が今までand
、or
、およびnot
以外の使用にそれらのいずれかを見たことがない、とさえ、その後、それらはまれです。これらは唯一のC ++で、プレーンなCのコードでは、デフォルトで許可されていないことに注意してください。あなたがCでそれらを使用する場合は、マクロとして自分で#define
、またはマクロは(C99のセクション7.9を参照してくださいとして#include
<iso646.h>
<%
>%
<:
:>
を除く上記のすべてを定義するヘッダ%:
を、%:%:
するか必要があります標準)。
あなたはそれらの残りの部分について学ぶために驚くかもしれ
and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
C ++キーワードのから一覧ます。
私はGCCの最近のバージョンは、これらのキーワードをサポートすると信じています。
この問題は古いですが、思いの提供いただくようお願いしていた。全回答:代替のトークンがすでに現在の取C++98(ISO/IEC14882:1998年, だと思い、初のISO標準C++).な証明のように自んし、自分のコピーのISO c++98), こちらのリンク-参照C++です。
としてのその他の回答、MSVCのコンパイラの違反 [lex.digraph] 部標準時 /座 フラグが指定されません。
GNUコンパイラグラム、私はMS VC ++のことは知りません。
あなたはあなたのコードファイルの先頭にこれを置くことによって、同じ機能を得ることができます。
#define and &&
#define bitor |
#define or ||
#define xor ^
#define compl ~
#define bitand &
#define and_eq &=
#define or_eq ^=
#define xor_eq ^=
#define not !
#define not_eq !=
これはちょっとハックですが、それが動作するはずです。
彼らは、14ページの、新しいC ++標準のためのワーキングペーパーでは、次のとおりです。 C ++標準の