在 C++/CLI 中引用和输出

Posted

技术标签:

【中文标题】在 C++/CLI 中引用和输出【英文标题】:ref and out in C++/CLI 【发布时间】:2011-03-31 15:56:57 【问题描述】:

我知道 C++/CLI 代码

void foo(Bar^% x);

变成

Void foo(ref Bar x);

变成什么C++/CLI代码

Void foo(out Bar x);

?

【问题讨论】:

【参考方案1】:

你可以使用 OutAttribute:

using namespace System::Runtime::InteropServices;    
void foo([Out] Bar^% x); 

【讨论】:

【参考方案2】:

C++/CLI 中没有这样的特定语法。我认为您可以通过添加OutAttribute 来修改参数来相当接近。但我不确定它是否实现了与 C#out 完全相同的语义。

out 的概念在很大程度上仅限于 C#。 CLR 真的只看到ref 参数。 out 概念是通过我相信的 mod opt 实现的,大多数语言都忽略它。

【讨论】:

这是传递引用语法,如您所说,OutAttribute 应用于参数。它创建与 C# out 参数完全相同的元数据。 “不...完全相同的语义”是指在 C# 中参数开始时未初始化并且必须在函数返回之前明确分配的事实?

以上是关于在 C++/CLI 中引用和输出的主要内容,如果未能解决你的问题,请参考以下文章

C++/CLI:返回对非托管对象的引用

在 x86 中编译引用 C++/CLI DLL 的 C# 项目时,MSBuild 无法构建

为啥我们不能将本地 C++ 的引用传递给 C++/CLI?

转换为C ++ CLI托管对象引用的本机指针?

如何将 void* 的引用从 C++/CLI 传递给本机 C 函数

C++/CLI 为啥对托管不可见