постоянная переменная парадокс - PullRequest
2 голосов
/ 14 января 2011

если у меня есть какое-то выражение на c ++:

const int x = 3;

могу ли я сказать, что x является переменной?Это кажется очень странным, потому что x не является переменной, потому что я не могу изменить его, заранее спасибо за любые расширения

Отредактировано PS спасибо за все ответы, я понял, что по определению C ++,ответ на мой вопрос может быть да, знаете ли вы другие языки, на которых ответ на мой вопрос будет нет?

Ответы [ 5 ]

5 голосов
/ 14 января 2011

Да.x является переменной, даже если вы не можете (законно) изменить ее значение.

По сути, в C ++ объект с именем является «переменной».

1 голос
/ 14 января 2011

В терминологии C ++ термин переменная почти синонимичен термину объект : любой объявленный объект является переменной . Является ли объект изменчивым или нет, не имеет значения. Итак, в официальной терминологии да, x является переменной.

1 голос
/ 14 января 2011

Это философский подход, его нельзя изменить, на самом деле такой компилятор, как GCC, сохраняет его в текстовом разделе. Таким образом, либо является немодифицируемой переменной, либо константой.

0 голосов
/ 15 января 2011

Кстати, это полезно для объявления функции, например,

void ReadStuff(const int a)

Это означает, что вы на самом деле можете присвоить функции нестатическую переменную, но она будет считаться константой (т. Е. Функция будетне меняй его).

0 голосов
/ 15 января 2011

В определении языка ISO для C ++ такой объект называется константной переменной , что означает переменную только для чтения . В концептуальном плане и в семантике естественного языка это, тем не менее, константа.

Я полагаю, что этот термин просто используется для дифференциации константного объекта (такого как x в вашем примере) от литеральной константы (например, 3), где один является адресуемым объектом, а другой нет. Термин const object не используется, поскольку объект относится к экземпляру в памяти, а переменная относится к имени или идентификатору, связанному с объектом.

...