C++ 中的 _In_ 是啥?
Posted
技术标签:
【中文标题】C++ 中的 _In_ 是啥?【英文标题】:What is _In_ in C++?C++ 中的 _In_ 是什么? 【发布时间】:2012-07-12 12:39:41 【问题描述】:我已经搜索了很多,但没有找到有用的结果。
我目前正在尝试为 Windows 8 Metro 编写简单的 DirextX 游戏,并且遇到了很多 _In_
。我只是想知道它是什么。
另外,我看到很多使用^
作为指针*
,我觉得这很奇怪。除此之外,一些类的接口为ref class MyClass
,我认为这是为了 C# 的易读性。
无论如何,任何帮助都会很棒。
【问题讨论】:
SomeType^
是一个 C++/CLI 托管指针。那不是 C++。
这些都不是真正的 C++。它们是 C++/CLI 或者可能是 C++/CX(或者可能是较旧的“托管 C++”)。每隔几年,Microsoft 就会发明一种基于 C++ 的新语言,但对其“托管”环境 (.NET) 进行了扩展。到目前为止,这些都没有获得很大的普及(委婉地说)。
这可能是相关的:Should we use In instead of __in?
当他提到 Metro 时,我想说那是 WinRT 的 C++/CX 的一部分...
^
不是指针。
【参考方案1】:
它是一个SAL annotation,用于代码分析。注释本身被定义为宏,在正常构建中,它们会扩展为空。
^
和 ref class
是 C++/CX 的功能,这是一组语言扩展,旨在更轻松地使用 C++ 构建适用于 Windows 8 的 Metro 风格应用程序。两者都不是标准 C++ 的一部分。文档(之前已链接)包含指向描述语言扩展的教程和参考的链接。
【讨论】:
完美答案,非常感谢。【参考方案2】:我认为(来自快速谷歌)_in_
用于指示参数是函数/方法的输入还是输出 (_out_
)。
^
是托管指针(垃圾回收指针,与 C++/CLI 相关)。
【讨论】:
哈,我以为是ln
,而不是in
。这确实是微软的目的。
@DeadMG 实际上,it is a reference handle,不是指针。【参考方案3】:
在 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_)
【讨论】:
【参考方案4】:_Out_
表示作为引用传递的参数。 _In_
是相反的意思。 (_Out_ x)
和 (&x)
相似。
【讨论】:
以上是关于C++ 中的 _In_ 是啥?的主要内容,如果未能解决你的问题,请参考以下文章