2015-11-13 6 views
3

Я знаю, что жесткие скобки ('[' и ']') используются для идентификации массива , но при поиске способов использования событий я наткнулся на другое использование для них и задаюсь вопросом, что именно это означает ...Квадратные скобки - не связаны массивы?

код я видел (link) выглядит следующим образом:

// evh_native.cpp 
#include <stdio.h> 

[event_source(native)] 
class CSource { 
public: 
    __event void MyEvent(int nValue); 
}; 

[event_receiver(native)] 
class CReceiver { 
public: 
    … 

Так ... Интересно, что именно это означает и то, что оно используется? Может кто-нибудь объяснить?

+0

Это что-то особенное для Windows-варианта C++, аннотируя поведение по отношению к событиям. Это не стандарт C++. –

+3

Это [* attributes *] (https://msdn.microsoft.com/en-us/library/zkwy014e.aspx), расширение языка Visual C++. – molbdnilo

ответ

5

Помимо использования массива и класса operator[], есть другое использование в C++, список захвата лямбды, как

int a; 
auto func= [a](int i){ return i*a; } 

но пример в вашей ссылке выглядит нестандартность (это называется родной C++, что бы это ни было). Еще одно использование - двойные скобки для атрибутов, например

[[noreturn]] void throw_error(std::string const&message); 
4

Это может быть несколько вещей; мне кажется, что ваше дело последнее в моем списке:

  1. Чтобы указать индекс массива.

  2. Чтобы указать список захвата в выражении или функции лямбда.

  3. [] может быть перегружен таким образом, чтобы он полностью отделялся от первоначального намерения. Усиление духа делает это.

  4. Нестандартное расширение компилятора.

1, 2 и 3 могут быть реализованы в стандартном C++; 4 не может.

+0

Нестандартный еще C++? – Walter

+0

@Walter: Я бы сказал, нет, но я смею сказать, что многие люди, которые выросли с огромным множеством нестандартных расширений компилятора для C и C++ в 1990-х годах, не согласились бы. Переключение на основе диапазона - самое худшее расширение, с которым я столкнулся. – Bathsheba

+0

Я сделал, но не – Walter

0

Это похоже на код C++/CLI, может быть какой-то код из .NET?

Смежные вопросы