Я прошелся по книге на C ++ и получил следующее утверждение long x = 32L
и данное утверждение как l or L suffix on an integer means the integer is a type long constant
; но когда я проверяю, используя компилятор как long x = 32L ; cout<<x; x = 45 ; cout<<x ;
тогда нет ошибки или предупреждения, так что здесь означает постоянная? Не длинное const x = 32; ?
Так или иначе 32L
является const
не имеет значения; когда ты пишешь long x = 32L;
затем x
переменная, значение которой копируется из 32
, x
конечно нет const
, Когда вы меняете x
вы не меняете буквальное 32
; вы помещаете новое значение в переменную x
Хранилище.
Технический термин в C ++ для 32
или же 32L
это буквальный. Однако люди иногда называют их «постоянными». Это немного сбивает с толку, потому что это не имеет ничего общего с тем, что ключевое слово const
делает.
Единственная разница между 32
а также 32L
это один int
а другой long
,
Я думаю, ты запутался в том, что L
для. Рассмотрим платформу с 32-битным int
и 64 бит long
:
unsigned long i = 0xffffffff << 16;
Это устанавливает: i <- 0xffff0000
поскольку 0xffffffff
неявно является целочисленным значением, и выражение справа вычисляется соответственно. С другой стороны,
unsigned long i = 0xffffffffUL << 16;
выходы: i <- ffffffff0000
, поскольку выражение оценивается как unsigned long.
Чтобы переменная была постоянной, она должна сопровождаться Const ключевое слово.
Например:
const int a = 5;
a = 6; // error
Теперь у вас есть то, что вы присваиваете постоянное значение, то есть 32 в переменной. Константа переходит к значению, а не к переменной.
Вы делаете, например:
a = 32L;
поэтому значение, которое вы назначаете переменной a
постоянная, 32L
,
Если вы сделали
for(int i = 0; i < 5; ++i)
a = i;
тогда значение, которое вы назначаете переменной a
не является константой.
я сильно предлагает вам взглянуть на моего родственника вопрос о L
что следует 32.
What is the difference between long x = 32L and long const x = 32 ?
Разница в том, что в первом вы можете назначить переменную x
новое значение, где во втором вы не можете.
Вы путаетесь с условиями.
Согласно этому утверждению:
int x = 32;
Икс переменная типа int, и 32 является литералом типа int.
Вы никогда не можете сделать 32 = 35 , но ты можешь сделать х = 35 так как Икс не является константой.
Согласно этому другому утверждению:
const long y = 32L;
это означает, что Y константа типа долго и не может быть изменено. Также, 32L является литералом типа долго и это тоже нельзя изменить.
Вы никогда не можете сделать у = 35 л так как Y является константой, и ее значение уже установлено.
Более того, как @MattMcNabb:
«Единственная разница между 32 и 32L заключается в том, что один int, а другой long».
ДЛ: Да, вы правы.
Книга называет это «константой», но это неправильно; правильный термин «буквальный».
Нет никакого способа изменить сам литерал (возможно, именно поэтому автор книги использовал этот термин), но, как только вы используете литерал для инициализации long int x
, x
может быть изменено, потому что это не const
,
Вы правы в том, что long int const x
был бы способ сделать окончательную «переменную» фактически постоянной.