Преобразование указателя в указатель в константу

Я читаю книгу под названием C++ Gotchas, в которой объясняются преобразования между константными указателями, и у меня возникают некоторые проблемы с пониманием следующих правил:

Два типа указателей T1 и T2 похожи, если существует тип T и целое число n > 0, такое что:

T1 - это cv 1, 0 указатель на cv 1,1, указатель на.,, cv 1, n − 1 указатель на cv 1, n T

а также,

T2 - это cv 2,0 указатель на cv 2,1 указатель на.,, cv 2, n − 1 указатель на cv 2, n T

где каждый cvi,j является const, volatile, const volatile или ничего.

Может кто-то указать мне правильное направление, где я могу получить объяснение, или кто-нибудь знает, что означают cv 1,0 и cv 1,1 в каждой из вышеперечисленных последовательностей? Книга недостаточно помогает мне понять это. Но я уверен, что это как-то связано с языком C++.

1 ответ

Решение

cv i,j представляет коллекцию из 2*(n+1) заполнителей:

Для каждой комбинации i с 1 <= i <= 2 а также j с 0 <= j <= n заполнитель cv i,j обозначает один из трех спецификаторов const,volatile, const volatlie или ничего.

Отрывок книги другими словами означает, что если эти заполнители и тип T можно найти так, что два утверждения ("T1 is ..") удовлетворяются, тогда T1 а также T2 называются "похожими".

Например T1 = const int* а также T2 = int* похожи, потому что они заполняют два утверждения из выдержки, если один выбирает:

  • T = int,n = 1
  • cv1,0= {nothing} а также cv1,1 = const
  • cv2,0={nothing} а также cv2,1 = {nothing}

Чтобы увидеть это, просто вставьте заполнители:

const int* это указатель на const int

int* это указатель на int

Другие вопросы по тегам