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_ 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++中的restrict关键字是啥意思?

python中的数千行错误是啥

节点配置文件中的 ___mac_get_pid 符号是啥?

节点配置文件中的 ___mac_get_pid 符号是啥?

我的分析结果中的“_dyld_start”是啥意思?

C++ 中的 :: 是啥意思? [复制]