неоднозначность в преобразовании квалификации - PullRequest
0 голосов
/ 26 февраля 2019

Я думаю, что я либо неправильно понял что-то, либо что-то в стандарте может быть неоднозначным.И это касается квалификационных преобразований.

Согласно новейшему проекту http://eel.is/c++draft/conv.qual#1

Cv-разложение типа T - это последовательность cvi и Pi такая, чтоT - это «cv0 P0 cv1 P1 ⋯ cvn − 1 Pn − 1 cvn U» для n> 0,

, насколько я понимаю, разложение типа T:

using T1 = const char * const **;

может быть следующим

  • n = 2
  • U = char
  • cv2 = const
  • P2 = *
  • cv1= const
  • P1 - *
  • cv0 = пусто
  • P0 = *

, но поскольку не указано, в каком направлении должна идти декомпозиция(IMO) можно также интерпретировать по-другому:

  • n = 2
  • U = char
  • cv0 = const
  • P0 = *
  • cv1 = const
  • P1 - *
  • cv2 = пусто
  • P2 = *

Это будет иметь значениедля следующего предложения http://eel.is/c++draft/conv.qual#3.3:

Если cv1i и cv2i различны, тоconst в каждом cv2k для 0

Поскольку для первой интерпретации предложение никогда не будет выполнено для i = 1 или 2, тогда как для второй интерпретации предложение будет истиннымдля i = 1 или 2.

Мое второе сомнение в том, как интерпретировать предложение

Если cv1i и cv2i различны, то const присутствует в каждом cv2k для 0

Для i = 0 или 1. Для i = 0 или 1 набор cv пуст, поэтому мы можем сказать, что все cv для этого набора имеют const, потому что все равно none и тамне является элементом в наборе, но мы также можем сказать, что ни один элемент не имеет const, поскольку в наборе нет ни одного элемента.

Есть ли в стандарте место, которое объясняет, как точно пониматьcv разложение и в каком направлении это должно идти?

1 Ответ

0 голосов
/ 27 февраля 2019

Ответ был дан @MartinBonner в комментариях к вопросу.

Я не заметил, что рядом с U есть cvn, что означает, что разложение константности идет от самого внешнего ксамый внутренний указатель .

(резюме с наибольшим индексом будет наиболее близко к типу U).

...