В чем разница между long x = 32L и long const x = 32?

Я прошелся по книге на 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; ?

-1

Решение

Так или иначе 32L является const не имеет значения; когда ты пишешь long x = 32L; затем x переменная, значение которой копируется из 32, x конечно нет const, Когда вы меняете x вы не меняете буквальное 32; вы помещаете новое значение в переменную xХранилище.

Технический термин в C ++ для 32 или же 32L это буквальный. Однако люди иногда называют их «постоянными». Это немного сбивает с толку, потому что это не имеет ничего общего с тем, что ключевое слово const делает.

Единственная разница между 32 а также 32L это один int а другой long,

2

Другие решения

Я думаю, ты запутался в том, что L для. Рассмотрим платформу с 32-битным int и 64 бит long :

unsigned long i = 0xffffffff << 16;

Это устанавливает: i <- 0xffff0000 поскольку 0xffffffff неявно является целочисленным значением, и выражение справа вычисляется соответственно. С другой стороны,

unsigned long i = 0xffffffffUL << 16;

выходы: i <- ffffffff0000, поскольку выражение оценивается как unsigned long.

0

Чтобы переменная была постоянной, она должна сопровождаться 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 новое значение, где во втором вы не можете.

0

Вы путаетесь с условиями.

Согласно этому утверждению:

int x = 32;

Икс переменная типа int, и 32 является литералом типа int.

Вы никогда не можете сделать 32 = 35 , но ты можешь сделать х = 35 так как Икс не является константой.

Согласно этому другому утверждению:

const long y = 32L;

это означает, что Y константа типа долго и не может быть изменено. Также, 32L является литералом типа долго и это тоже нельзя изменить.

Вы никогда не можете сделать у = 35 л так как Y является константой, и ее значение уже установлено.

Более того, как @MattMcNabb:

«Единственная разница между 32 и 32L заключается в том, что один int, а другой long».

0

ДЛ: Да, вы правы.


Книга называет это «константой», но это неправильно; правильный термин «буквальный».

Нет никакого способа изменить сам литерал (возможно, именно поэтому автор книги использовал этот термин), но, как только вы используете литерал для инициализации long int x, x может быть изменено, потому что это не const,

Вы правы в том, что long int const x был бы способ сделать окончательную «переменную» фактически постоянной.

0
По вопросам рекламы [email protected]