【发布时间】:2011-03-31 15:56:57
【问题描述】:
我知道 C++/CLI 代码
void foo(Bar^% x);
变成
Void foo(ref Bar x);
变成什么C++/CLI代码
Void foo(out Bar x);
?
【问题讨论】:
标签: .net c++-cli pass-by-reference
我知道 C++/CLI 代码
void foo(Bar^% x);
变成
Void foo(ref Bar x);
变成什么C++/CLI代码
Void foo(out Bar x);
?
【问题讨论】:
标签: .net c++-cli pass-by-reference
你可以使用 OutAttribute:
using namespace System::Runtime::InteropServices;
void foo([Out] Bar^% x);
【讨论】:
C++/CLI 中没有这样的特定语法。我认为您可以通过添加OutAttribute 来修改参数来相当接近。但我不确定它是否实现了与 C#out 完全相同的语义。
out 的概念在很大程度上仅限于 C#。 CLR 真的只看到ref 参数。 out 概念是通过我相信的 mod opt 实现的,大多数语言都忽略它。
【讨论】:
OutAttribute 应用于参数。它创建与 C# out 参数完全相同的元数据。 “不...完全相同的语义”是指在 C# 中参数开始时未初始化并且必须在函数返回之前明确分配的事实?