Многократные cv-разложения типа - PullRequest
10 голосов
/ 24 июня 2019

Пример в [conv.qual] / 1 говорит, что тип const int ** имеет два cv-разложения.

Cv-разложение типа T - это последовательность cv_i и P_i, такая что T равна

«cv_0 P_0 cv_1 P_1 ⋯ cv_ {n − 1} P_ {n − 1} cv_n U»

для n≥0, где каждый cv_i является набором cv-квалификаторов ([basic.type.qualifier]), и каждый P_i является «указателем на» ([dcl.ptr]), «указателем на член класса Ci тип »([dcl.mptr]),« массив N_i »или« массив неизвестных границ » ([Dcl.array]). Если P_i обозначает массив, cv-квалификаторы cv_ {i + 1} для типа элемента также принимаются как cv-квалификаторы cv_i массива. [Пример: Тип, обозначенный идентификатором типа const int **, имеет два cv-разбиения, принимающих U как «int» и как «указатель на const int» . - конец примера] N-кортеж cv-квалификаторов после первого в самом длинном cv-разложении T, то есть cv_1, cv_2,…, cv_n, называется cv-квалификационной сигнатурой T.

Почему тип не имеет трех декомпозиций: третья с n = 0, cv_0 пуста и U = "указатель на указатель на const int"?

1 Ответ

4 голосов
/ 25 июня 2019

Почему у типа нет трех разложений

Имеет, но пример немного не синхронизирован с нормативной частью.Нормативная формулировка была сравнительно недавно изменена на этот коммит , заменив условие в определении cv-декомпозиции с n > 0 на n ≥ 0.

PR, устраняющий проблему в этом примере: здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...