Преобразование указателя в указатель в константу - PullRequest
4 голосов
/ 21 декабря 2011

Я читаю книгу под названием 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 Ответ

4 голосов
/ 21 декабря 2011

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

...