Подтвердить что ты не робот

Странное объявление с использованием в С++

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

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

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

  • Какой тип он представляет?
  • Где нам нужны такие объявления?
4b9b3361

Ответ 1

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

То, что вы на самом деле делаете, это typedefing тип массива

const_buffer_t 

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

Ответ 2

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

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

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

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