Добавить спецификатор const в ссылку на массив typedef - PullRequest
0 голосов
/ 09 декабря 2018

Рассмотрим следующее определение типа:

typedef int (&foo_t)[3];

или

using foo_t = int(&)[3];

При добавлении в тип квалификатора const он игнорируется:

int foo[3] = {1, 2, 3};
const foo_t fooref = foo;
fooref[0] = 4;  // No error here

Или когда я пытаюсь присвоить ему массив const:

const int foo[3] = {1, 2, 3};
const foo_t fooref = foo;
/* error: binding reference of type ‘foo_t’ {aka ‘int (&)[3]’} to ‘const int [3]’ discards qualifiers
 const foo_t fooref = foo;
                      ^~~ */

Как добавить const к ссылке на массив с определением типа?

1 Ответ

0 голосов
/ 09 декабря 2018

Вы не можете просто добавить const к типу, на который ссылается тип с определением типа.Подумайте об определении типа указателя типа:

typedef int* pint_t;

Тип const pint_t называет неизменяемый указатель на изменяемый int.

Если вы можете, просто добавьте его в определение (илиопределите const вариант вашего типа):

typedef const int (&foo_t)[3];

или

using foo_t = const int(&)[3];

Если об этом не может быть и речи, используйте общую схему распаковки для создания самого внутреннего типа const может быть осуществимо, но, вероятно, не рекомендуется - то есть проверить ваш дизайн.

...