C++/CLI
C++/CLIの追跡参照(トラッキング参照)は値ではなく参照で渡されるハンドルである。これらはC#のrefやVisual Basic .NETのByRefに相当する。C++/CLIはハンドルへの追跡参照を示すのに^%という構文を使用する。これは標準C++で「ポインタへの参照」を表す構文*&に似ている。
下記のコードは追跡参照の使用例である。仮に、下のコードでString^% sをString^ sに変えてしまうと、参照ではなく値を渡すことになるため、sは配列にセットされた文字列ハンドルをコピーするだけとなる。そのため、arrの各要素は初期化されないままになってしまう。
加えて上記のコードは.NET言語の間でも表現力に差があるという例になる。C#のforeach文ではforeach (ref string s in arr)というようにコレクション要素を参照として取得することができないため、例えば以下のような回避策を使うしかない。
C++/CLIには、C#のoutパラメータ修飾子に直接相当する構文は存在しない。C#を含む他の.NET言語と相互運用する際に必要な場合、属性構文[System::Runtime::InteropServices::Out]を使い、メソッド引数を方向属性System::Runtime::InteropServices::OutAttributeで修飾する。