ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
.NET Framework用仮想計算機、共通言語基盤(CLI)上で動作する、C++を拡張したC++の上位互換プログラミング言語。ECMA-372として標準化されている。
それ以前、MicrosoftはC++の独自拡張として「C++マネージ拡張」をVisual Studio .NET 2002から提供した。
これがさらに改訂された結果、独自のプログラミング言語としてC++/CLIがVisual Studio 2005から提供開始となった。これは、Visual C++ 2005以降でコンパイルすることが出来る。
C++の独自拡張だった「C++マネージ拡張」と比較し、より分かりやすい構文が導入され、書きやすさと可読性が向上している。
MicrosoftのC++拡張には他にC#があるが、C#よりはC++に近い。
C++マネージ拡張は、C++の独自拡張を加えた上位互換仕様だった。マネージ拡張とは、簡単にはガベージコレクション機能である。
C++/CLIも同様にC++の上位互換だが、一つのプログラミング言語であり、C++に対し、様々な機能拡張や仕様の変更が行なわれている。
特に顕著な仕様差は、.NETの参照型に関するものである。
旧C++マネージ拡張ではこれはC++のそれと同様にポインターと呼ばれ、C++のポインターを__nogcポインター、.NETの参照型オブジェクトを指すポインターを__gcポインターと呼んだ。ガベージコレクションの有無をそのまま表わしている。
C++/CLIでは、.NETの参照型オブジェクトを指すものをハンドルと呼び、ポインターはC++のもののみとなった。
C++/CLIのハンドルは "クラス名 ^"で表現される。従来のクラスは "クラス名 *" なので、ベージコレクションの有無が分かりやすくなった。
また、ポインター演算子の&に対してC++/CLIではハンドル演算子の%が用意された。オブジェクトそのものではなく、オブジェクトの参照(ハンドル)を得る必要がある場合、ハンドル演算子%を使用する。
組み合わせて、追跡参照(トラッキング参照)として "^%" という構文も利用できる。
デストラクターはオブジェクトが消滅するときに呼ばれる処理だが、C++/CLIにはこの他にガベージコレクションが存在し、両方が使用される。そこでC++/CLIでは、ガベージコレクション時に呼び出される処理をファイナライザーと呼び分けている。
デストラクターは従来のC++もC++/CLIも~クラス名()だが、C++/CLIのファイナライザーは!クラス名()となる。
旧C++マネージ拡張やC#では、virtual void Finalizeという名前が使われていたが、C++/CLIは新たなプログラミング言語として、仕様が拡張されているのである。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます