C++/CLI:为什么我不能通过引用传递字符串?

Cas*_*ash 6 string managed-c++ c++-cli reference

为什么Microsoft的C++/CLI不允许我通过引用传递字符串?我收到以下错误:

C3699:'&':不能在类型'System :: String'上使用此间接

Ðаn*_*Ðаn 30

首先,实际上有两种针对.NET的Microsoft特定C++方言:较旧的"Managed C++"(Visual Studio 2002和2003)和C++/CLI(Visual Studio 2005及更高版本).

在C++/CLI中,System::String^是对字符串的.NET引用; 一些作者称这是一个"跟踪指针"来比较和对比普通的C++指针.与在C++中一样,您可以"通过引用"传递.NET引用,但不使用&,而是使用%,如:

void makeStr(System::String^ %result) {
   result = gcnew System::String("abc");
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ter 11

听起来像是在使用Managed C++,这是一个与.NET Framework一起使用的混合C++.

在Managed C++中,我相信您正在寻找的语法是System::String^.这样做的原因是,由于托管类型是由.NET Framework收集的,因此您不能创建"常规"引用,因为GC需要跟踪对特定变量的所有引用,以了解何时可以安全地释放它.