in char 转换为 char*,但 out char 转换为 char* 吗?
in char translates to char*, but does out char translate to char*?
所以我被告知编译器将带有签名 in char
的参数转换为 char*
:
Also, if it's an in
, you should not specify the pointer.
in
makes it a reference type.
in float
is equivalent to const float*
.
这让我开始思考。 out char
也可以翻译成 char*
吗?为什么编译器会这样做?这与 [In]
和 [Out]
属性的用法相比如何?
I've been told that the compiler translates parameters with a signature in char
to char*
谁告诉你的,都没有很好地说明情况。也许他们试图类比C? C# 引用类似于 C 中的指针,但它们并不相同。更好的类比是 C++ 引用,但它们也不完全相同。与其尝试通过类比另一种语言来理解该功能,不如尝试根据其文档来理解该功能。
正确的思考方式是in
、out
和ref
都要求形参对应的实参是变量,正式成为变量参数的 别名 。这是您应该考虑的抽象级别。
实际上,in
、out
和 ref
是通过使用 指向变量 的托管指针实现的。但是,您应该不 将此视为char*
。这是指向变量的 unmanaged 指针的类型。托管指针有许多不是非托管指针的属性;例如,它们在垃圾收集器压缩区域时非常健壮。例如,您可以创建指向托管类型的托管指针,但不能创建指向托管类型的非托管指针。等等。
Why does the compiler do this?
因为这样做正确地实现了规范。
How does this compare to the usage of [In]
and [Out]
attributes?
我不明白你想比较的是哪两件事。问题不清楚。
将这些属性用于 COM 互操作。如果您不清楚这些属性的用途,请阅读这些属性的文档。
所以我被告知编译器将带有签名 in char
的参数转换为 char*
:
Also, if it's an
in
, you should not specify the pointer.in
makes it a reference type.in float
is equivalent toconst float*
.
这让我开始思考。 out char
也可以翻译成 char*
吗?为什么编译器会这样做?这与 [In]
和 [Out]
属性的用法相比如何?
I've been told that the compiler translates parameters with a signature
in char
tochar*
谁告诉你的,都没有很好地说明情况。也许他们试图类比C? C# 引用类似于 C 中的指针,但它们并不相同。更好的类比是 C++ 引用,但它们也不完全相同。与其尝试通过类比另一种语言来理解该功能,不如尝试根据其文档来理解该功能。
正确的思考方式是in
、out
和ref
都要求形参对应的实参是变量,正式成为变量参数的 别名 。这是您应该考虑的抽象级别。
实际上,in
、out
和 ref
是通过使用 指向变量 的托管指针实现的。但是,您应该不 将此视为char*
。这是指向变量的 unmanaged 指针的类型。托管指针有许多不是非托管指针的属性;例如,它们在垃圾收集器压缩区域时非常健壮。例如,您可以创建指向托管类型的托管指针,但不能创建指向托管类型的非托管指针。等等。
Why does the compiler do this?
因为这样做正确地实现了规范。
How does this compare to the usage of
[In]
and[Out]
attributes?
我不明白你想比较的是哪两件事。问题不清楚。
将这些属性用于 COM 互操作。如果您不清楚这些属性的用途,请阅读这些属性的文档。