言語キーワード

更新 : 2007 年 11 月

いくつかの言語キーワードは、Visual C++ 2008 では C++ マネージ拡張から変更されています。

新しい Visual C++ 2008 構文では、プレフィックスとしての 2 つのアンダースコアがすべてのキーワードから削除されます (__identifier を除く)。たとえば、プロパティは __property ではなく property として宣言されるようになりました。

マネージ拡張で 2 つのアンダースコアがプリフィックスとして使用されていたのには、2 つの大きな理由がありました。

  • 2 つのアンダースコアは、ISO-C++ 標準にローカル拡張を提供するための標準の方法です。マネージ拡張のデザインの第 1 の目標は、新しいキーワードやトークンなど、標準言語との非互換性を導入しないことでした。マネージ参照型のオブジェクトの宣言にポインタ構文が選択されたのも、主にこうした理由によるものです。

  • 標準に準拠することに加えて、2 つのアンダースコアを使用すると、言語ユーザーの既存のコード ベースへの干渉を合理的に阻止できます。これはマネージ拡張のデザインのもう 1 つの主要な目標でした。

2 つのアンダースコアを削除することになっても、標準準拠への Microsoft の姿勢は今後も変わりません。しかし、CLR の動的オブジェクト モデルのサポートは、新しい強力なプログラミング パラダイムです。この新しいパラダイムをサポートするためには、独自の高度なキーワードおよびトークンが必要となります。私たちは、この新しいパラダイムの最高の表現と、それを統合し標準言語をサポートする方法を追求してきました。新しい構文デザインが、本質的に異なる 2 つのオブジェクト モデルをうまく融合し、ファースト クラスのプログラミング体験をユーザーに提供します。

同じように、これらの新しい言語キーワードによる干渉を最小限に抑えることにも、弊社は注意を払っています。この問題はコンテキスト キーワードとスペース区切りキーワードを使用することによって解決されました。実際の新しい言語構文を見る前に、これらの 2 つの特殊なキーワードの特徴を理解しておきましょう。

コンテキスト キーワードは特定のプログラム コンテキスト内で特別な意味を持ちます。たとえば、sealed は一般的なプログラム内では通常の識別子として扱われます。しかし、マネージ参照クラス型の宣言の部分で使用される場合は、そのクラス宣言のコンテキスト内のキーワードとして扱われます。これによって、言語に新しいキーワードを導入した場合の影響を最小限に抑えることができます。これは既存のコード ベースを持つユーザーにとっては非常に重要なことであると考えています。それと同時に、新しい機能を使用するユーザーには、追加の言語機能について最高の経験を提供します。これはマネージ拡張には欠けていると考えていた点です。sealed の使用例については、「マネージ クラス型の宣言」を参照してください。

スペース区切りキーワード (value class など) はコンテキスト キーワードの特殊なケースです。これは、既存のキーワードとコンテキスト修飾子をスペースで区切って組み合わせたものです。このペアは、2 つのキーワードではなく 1 つの単位として扱われます。

参照

概念

C++/CLI 移行ガイド

New C++ Language Features