Кроме ключевых слов, стандарт резервирует также набор идентификаторов для использования в библиотеке, поэтому пользовательские идентификаторы не могут содержать два последовательных символа подчеркивания, а также начинаться с символа подчеркивания, непосредственно за которым следует прописная буква. Кроме того, идентификаторы, определенные вне функций, не могут начинаться с символа подчеркивания.
Существует множество общепринятых соглашений для именования переменных. Применение подобных соглашений может существенно улучшать удобочитаемость кода.
• Идентификатор должен быть осмысленным.
• Имена переменных обычно состоят из строчных символов. Например, index
, а не Index
или INDEX
.
• Имена классов обычно начинаются с прописной буквы, например Sales_item
.
• Несколько слов в идентификаторе разделяют либо символом подчеркивания, либо прописными буквами в первых символах каждого слова. Например: student_loan
или studentLoan
, но не studentloan
.
Самым важным аспектом соглашения об именовании является его неукоснительное соблюдение.
Упражнение 2.12. Какие из приведенных ниже имен недопустимы (если таковые есть)?
(a) int double = 3.14; (b) int _;
(с) int catch-22; (d) int 1_or_2 = 1;
(e) double Double = 3.14;
2.2.4. Область видимости имен
В любом месте программы каждое используемое имя относится к вполне определенной сущности — переменной, функции, типу и т.д. Однако имя может быть использовано многократно для обращения к различным сущностям в разных точках программы.
Область видимости (scope) — это часть программы, в которой у имени есть конкретное значение. Как правило, области видимости в языке С++ разграничиваются фигурными скобками.
В разных областях видимости то же имя может относиться к разным сущностям. Имена видимы от момента их объявления и до конца области видимости, в которой они объявлены.
В качестве примера рассмотрим программу из раздела 1.4.2:
#include <iostream>
int main() {
int sum = 0;
// сложить числа от 1 до 10 включительно
for (int val = 1; val <= 10; ++val)
sum += val; // эквивалентно sum = sum + val
std::cout << "Sum of 1 to 10 inclusive is "
<< sum << std::endl;
return 0;
}
Эта программа определяет три имени — main
, sum
и val
, а также использует имя пространства имен std
, наряду с двумя именами из этого пространства имен — cout
и endl
.
Имя main
определено вне фигурных скобок. Оно, как и большинство имен, определенных вне функции, имеет глобальную область видимости (global scope). Будучи объявлены, имена в глобальной области видимости доступны в программе повсюду. Имя sum
определено в пределах блока, которым является тело функции main()
. Оно доступно от момента объявления и далее в остальной части функции main()
, но не за ее пределами. Переменная sum
имеет область видимости блока (block scope). Имя val
определяется в пределах оператора for
. Оно применимо только в этом операторе, но не в другом месте функции main()
.
Объект имеет смысл определять поближе к месту его первого использования. Это улучшает удобочитаемость и облегчает поиск определения переменной. Однако важней всего то, что когда переменная определяется ближе к месту ее первого использования, зачастую проще присвоить ей подходящее исходное значение.