Константа против изменяемой - какая из них переменная?
Переменная - это то, чем она является, когда вы ее определяете.Если вы напишите:
int j = 0; // j is a mutable int
, то j
является изменяемым int
.Это не изменится.И если вы напишите
const int j = 0; // j is a constant int
, тогда j
будет const int
.Запись
static_cast<const int&>(j)
означает «В контексте этого выражения трактуйте j
, как если бы оно было const
».Это означает, что вы не можете изменить его значение, потому что оно постоянное.
static_cast<const int&>(j) = 10; //Error: can't change the value of a const int
Где полезна const
?
const
полезна, потому что предотвращает ошибки, возникающие в результате случайного изменения чего-либо.Например, я мог бы написать функцию, которая считает пробелы в строке:
int countSpaces(const std::string& s) {
int count = 0;
for(char c : s) {
if(c == ' ') count += 1;
}
return count;
}.
Здесь я принимаю параметр как const string&
.Чего это достигнет?
- Поскольку
const std::string&
является ссылкой, мне не нужно делать копию строки (это будет дорого) - Поскольку
const std::string&
const, тот, кто написал countSpaces
, обещает, что countSpaces
не изменит какую-либо строку.