C++中的_In_是什么?

36
我已经搜索了很多次,但没有找到有用的结果。
我目前正在尝试为Windows 8 Metro编写简单的DirectX游戏,并且经常遇到"_In_"。我想知道它是什么意思。
此外,我看到了很多使用"^"作为指针"*"的奇怪写法。除此之外,一些类的接口是"ref class MyClass",我相信这是为了提高C#代码的可读性。
总之,任何帮助都将是非常宝贵的。

4
SomeType^ 是 C++/CLI 的托管指针,而不是 C++。 - chris
8
这两种语言都不是真正的C++。它们分别是C++/CLI或C++/CX(或可能是旧版的“Managed C++”)。每隔几年,微软会基于C++发明一种新的语言,但增加了针对其“托管”环境(.NET)的扩展。到目前为止,这些语言都没有获得太多的流行度(委婉地说)。 - Jerry Coffin
1
这可能与此相关:我们应该使用_In_而不是__in吗? - Desmond Hume
2
他提到了Metro,我想那是C++/CX for WinRT的一部分... - MFH
“^” 不是指针。 - IS4
4个回答

40

这是一个用于代码分析的SAL注释。这些注释本身被定义为宏,在正常构建中会扩展为空。

^ref classC++/CX的特性,它是一组语言扩展,旨在使使用C++为Windows 8构建Metro样式应用程序更加容易。它们都不是标准C++的一部分。文档(链接如上)中有链接到教程和参考描述这些语言扩展。


1
完美的答案,非常感谢。 - Infinity James

1
sal.h 文件中,我找到了这个定义:

// Input parameters --------------------------

//   _In_ - Annotations for parameters where data is passed into the function, but not modified.
//          _In_ by itself can be used with non-pointer types (although it is redundant).

// e.g. void SetPoint( _In_ const POINT* pPT );
#define _In_                            _SAL2_Source_(_In_, (), _Pre1_impl_(__notnull_impl_notref) _Pre_valid_impl_ _Deref_pre1_impl_(__readaccess_impl_notref))
#define _In_opt_                        _SAL2_Source_(_In_opt_, (), _Pre1_impl_(__maybenull_impl_notref) _Pre_valid_impl_ _Deref_pre_readonly_)

0

从一个快速的谷歌搜索来看,我认为_in_用于指示参数是否为函数/方法的输入或输出(_out_)。

^是托管指针(垃圾收集指针),与C++/CLI相关。


1
哈,我以为那里写的是ln,而不是in。这确实是微软的目的。 - chris
1
@DeadMG 实际上,它是一个引用 _句柄_,而不是指针。 (http://msdn.microsoft.com/en-us/library/windows/apps/hh699870.aspx) - Cole Tobin

-1

_Out_表示作为引用传递的参数。_In_则相反。(_Out_ x)(&x)类似。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接