Я читаю книгу по языку программирования C ++ и изучаю указатель на символ,
я нашел этот код char s[] = "Gorm";
, который напоминает мне, что строковый литерал неявно преобразуется в const char *.
, поэтому я смутился, что lhs и rhs не одного типа.
я использовал онлайн-компилятор и код отсюда: Можно ли напечатать тип переменной в стандарте C ++?
, чтобы получить представление о том, как компилятор видит тип lhs и rhs,
тогда я обнаружил, что lhs рассматривается как char[5]
, тогда как rhs рассматривается как char[5] const &
я могу интерпретировать lhs,
, но я не могу понять, что такое "постоянная ссылка lvalue на массив из 5 символов" или
даже после неявного преобразования lhs char s[]
в char* s
,
что такое "постоянная ссылка lvalue на неконстантный указатель на неконстантный символ" ??
не является lvalue-ссылкой по определению константы "это относится только к значению, инициализирующему его" ???
так зачем нам нужен const перед "&" ???
и как можно назначить lhs и rhs разных типов ??????
предложенный ответ действительно полезен для понимания того, как char s [] инициализируется из строкового литерала "itэто правило языка ".
но это не отвечает на часть вопроса относительно выражения "char [5] const &" ???
что означает const &
в этом странном выражении? !!!
что означает const
???
относится ли это к самой ссылке на lvalue ??? "ссылка является постоянной по определению, и мы не можем изменить значение ссылки после инициализации" ???
или это относится к элементу массива const char
, так что строковый литерал массива не может изменить ????
, но в этом случае const
должен быть поставлен перед char
илипосле char
не раньше &
????? !!!
или const относится к типу char[5]
, и в этом случае какова его важность?
обычно массив не может быть изменен относительно размера или типа после определения ??