В фрагменте кода в предыдущем вопросе в stackoverflow я увидел это странное для меня объявление с using:

template <std::size_t SIZE> 
class A
{
public:
  ...
  using const_buffer_t = const char(&)[SIZE];
  ...
};

Не мог бы кто-нибудь ответить на следующие вопросы:

  1. Какой тип он представляет?
  2. Зачем нужны такие декларации?
19
101010 25 Апр 2014 в 18:21

2 ответа

Лучший ответ

Это псевдоним типа, новый синтаксис, доступный с C ++ 11.

На самом деле вы определяете тип массива.

const_buffer_t 

Будет массивом const char с длиной = SIZE

18
Nikos Athanasiou 25 Апр 2014 в 14:23

Объявление using - новый синтаксис, представленный в C ++ 11; он вводит псевдоним типа , указывая, что const_buffer_t теперь является псевдонимом для типа const char(&)[SIZE]. В этом отношении такое использование using практически идентично использованию typedef (хотя псевдонимы типа using являются более гибкий).

Что касается фактического типа, о котором мы говорим (const char(&)[SIZE]), это ссылка на массив размером SIZE; ссылки на массив используются редко, но могут иметь свое применение:

  • если в какой-либо функции вы хотите принудительно получить ссылку на массив определенного размера вместо универсального указателя, вы можете сделать это с помощью ссылок на массив (обратите внимание, что даже если вы напишете int param[5] в объявлении функции, он будет проанализирован как int *);
  • то же самое относится к сохранению ссылок на массив (явно документируя, что вы возвращаете ссылку на массив определенного размера);
  • что еще более важно, если вы хотите динамически размещать «истинные» многомерные массивы (в отличие от массива указателей на одномерный массив или «плоского массива» с «ручной двумерной адресацией») вы должны использовать их.

См. Также FAQ по массивам, где большая часть этого материала объясняется в деталь.

14
Community 23 Май 2017 в 12:31