Что такое _In_ в C++?

Я искал это довольно много, но не нашел полезных результатов.

В настоящее время я пытаюсь запрограммировать простую игру DirextX для Windows 8 Metro и довольно много наткнулся на _In_. Мне просто интересно, что это такое.

Кроме того, я часто встречал использование ^ в качестве указателя *, что показалось мне странным. Вдобавок к этому, некоторые классы имеют интерфейс ref class MyClass, что, как мне кажется, необходимо для удобочитаемости C#.

В любом случае, любая помощь будет блестящей.


person Infinity James    schedule 12.07.2012    source источник
comment
SomeType^ — это управляемый указатель C++/CLI. Это не С++.   -  person chris    schedule 12.07.2012
comment
Ни один из них на самом деле не C++. Это C++/CLI или, возможно, C++/CX (или, возможно, более старый Managed C++). Каждые несколько лет Microsoft изобретает новый язык на основе C++, но с расширениями для своей управляемой среды (.NET). Пока ни один из них не приобрел большой популярности (мягко говоря).   -  person Jerry Coffin    schedule 12.07.2012
comment
Это может быть связано с: Должны ли мы использовать In вместо __в?   -  person Desmond Hume    schedule 12.07.2012
comment
когда он упоминает Metro, я бы сказал, что это часть C++/CX для WinRT...   -  person MFH    schedule 12.07.2012
comment
^ не является указателем.   -  person IS4    schedule 22.03.2017


Ответы (4)


Это аннотация SAL, используемая для анализ кода. Сами аннотации определяются как макросы, которые в обычных сборках не расширяются до нуля.

^ и ref class — это функции C++. /CX — набор языковых расширений, разработанный для упрощения создания приложений в стиле Metro для Windows 8 на языке C++. Ни один из них не является частью стандартного С++. В документации (связанной ранее) есть ссылки на руководства и ссылки, описывающие языковые расширения.

person James McNellis    schedule 12.07.2012
comment
Идеальный ответ, очень ценю это. - person Infinity James; 13.07.2012

Я думаю (из быстрого Google), что _in_ указывает, является ли параметр входом или выходом (_out_) для функции/метода.

^ — это управляемый указатель (указатель со сбором мусора, связанный с C++/CLI).

person Max    schedule 12.07.2012
comment
Ха, я думал, там сказано ln, а не in. Это действительно цель с Microsoft. - person chris; 12.07.2012
comment
@DeadMG На самом деле, это ссылка дескриптор, не указатель. - person Cole Johnson; 18.02.2013

В файле 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_)
person Cengizz    schedule 09.05.2021

_Out_ означает, что аргумент передается как ссылка. _In_ означает обратное. (_Out_ x) и (&x) похожи.

person Diptendu    schedule 07.03.2013