Это указатель на изменяемый символ:
typedef char * str;
Это постоянный указатель на изменяемый символ.Указатель не может быть изменен, но указанный символ может быть изменен:
typedef char * const cstr;
Существует простой способ прочитать объявления указателя и const: читать его справа налево:
T * const x; // x is a constant that points to an object of type T
T const * x; // x points to a constant object of type T.
Этот argv является указателем (распавшимся массивом) на константу cstr.В конце концов, это указатель на константу (две константы, которые рассматриваются как один) указатель на char:
int main(int argc, const cstr argv[]
Построить вектор str (из указателей на char) из набора постоянных указателей на char,Нам не важно, что сами указатели являются константами, поскольку код не изменяет указатели, а только копирует их:
const vector<str> arguments(argv + 1, argv + argc)
Здесь нет проблем.
Обратите внимание, что написание
const
слева от типа часто называют "
west const " или, что несколько саркастически,
const west
.Напротив, надпись
const
справа часто называется
east const
.Семантически
east const
и
west const эквивалентны.
В вопросе argv
используется обозначение west const , так как const
слеваcstr
.Если бы вы использовали east const
все время, то это выглядело бы так:
int main(int argc, cstr const argv[]
Возможно, этот способ написания прояснит, что const применяется к переменной argv
, а не к указанному значению.