Я читал C ++ - Учебник для начинающих (от Жозе Ладжи и Стэнли Б. Липпмана), когда натолкнулся на этот раздел о верхнем и низком уровне const
с.В одном абзаце говорится, что при копировании объекта верхний уровень const
s игнорируется.
Например.
const int i = 24;
int i2 = i;
Где квалификация const
верхнего уровня в i игнорируется при копировании в i2 .
Однако, это также заявляет
С другой стороны, низкий уровень const
никогда не игнорируется.Когда мы копируем объект, оба объекта должны иметь одинаковую низкоуровневую квалификацию const
, или должно быть преобразование между типами двух объектов.В общем, мы можем преобразовать не const
в const
, но не наоборот.
Теперь, обычно, когда в C ++ есть такое правило, есть причина.Я считаю, что их понимание является основополагающим для понимания правила и, следовательно, облегчения его запоминания (это похоже на понимание математической концепции вместо запоминания формул).Однако я не нахожу логического правила, которое бы вписывалось здесь в загадку.
Таким образом, мой вопрос:
- Почему при копировании объекта верхнего уровня
const
квалификация игнорируется?(Есть раздел, объясняющий, почему в книге тоже, но я не могу его понять)
Копирование и объект не изменяют скопированный объект.В результате не имеет значения, является ли объект, скопированный или скопированный, const
В чем причина того, что низкоуровневый
const
никогда не игнорируется при копировании объекта?(низкоуровневая
const
квалификация необходима для обоих объектов)