2 семестр / Литература / Язык программирования С++. Краткий курс. Страуструп
.pdf30
Глава
1. Основы
В
объявлениях
[ ]
означает
"массив
из",
а
* -
"указатель
на".
Все
масси
вы
в
качестве
нижней
границы
имеют
О,
поэтому
упомянутый
выше
массив
v
имеет
шесть
элементов
-
от
v
[О]
до
v [5] .
Размер
массива
должен
быть
константным
выражением
(§
1.6).
Переменная
указателя
может
хранить
адрес
объекта
соответствующего
типа:
char*p char х
= =
&v[3]; *р;
// р //*р
указывает - объект,
на на
четвертый элемент |
v |
который указывает |
р |
В
выражении унарный
префикс
*
означает
"содержимое",
а
& -
"адрес".
Результат
показанного
выше
инициализированного
определения
графически
может
быть
представлен
следующим
образом.
4:
5:
Рассмотрим
копирование
десяти
элементов
из
одного
массива
в
другой:
void
copy_fct ()
{
int int for
/ /
vl[lO] |
= {0,1,2,3,4,5,6,7,8,9); |
|
|
||
v2[10]; |
|
//Чтобы |
стать |
копией vl, |
|
(auto |
i=O; i!=lO; |
++i) |
// копируем элементы |
||
v2[i]=vl[i]; |
|
|
|
|
|
... |
|
|
|
|
|
Эта
инструкция
for
может
быть
прочтена
как
"установить
i
равным
нулю;
пока
i
не
равно
10,
копировать
i-й
элемент
и
увеличить
i".
При
применении
к
целочисленной
переменной
или
к
переменной с
плавающей
точкой
опера
тор
инкремента++
просто
добавляет
1.
С++
предлагает
также
более
простую
инструкцию for, которая называется
стейшего обхода последовательности:
циклом
for
для
диапазона,
для
про
void |
print () |
{ |
|
int for
for 11
v[] |
= |
(auto |
|
cout |
|
(auto |
|
cout |
|
... |
|
{0,1,2,3,4,5,6,7,8,9}; |
||
х |
v) |
//Для каждого |
<<х <<
х{10,21,32,43,54,65})
<<х << '\n';'\n';
х
из
v
v
Первый цикл для диапазона можно прочитать |
как |
"для каждого элемента |
от первого до последнего поместить его копию |
в х |
и распечатать ее". Об- |
1.9.
Отображение
на
аппаратные
средства
35
Так же, |
как и инструкция for (§1.7), |
менную и |
тестировать ее. Например: |
инструкция
if
может
вводить
пере
void (
do_something(vector<int>&
v)
if
(auto
n |
= |
v.size();
n!=O)
11
} 11
Попадаем
сюда,
если |
п!=О |
Здесь
целое
значение
n
определяется
для
использования
внутри
инструк
ции
if,
инициализируется
значением
v.
size ()
и
тут
же,
после точки
с
за
пятой,
проверяется
условие
n
!
=О.
Имя,
объявленное
в
условии,
находится
в
области
видимости
обеих
ветвей
инструкции
if.
i
f
Как и для инструкции for, |
цель объявления имени в условии инструкции |
заключается в том, чтобы |
ограничить область видимости переменной, |
улучшить
читаемость
и
минимизировать
ошибки.
Наиболее
распространенный
случай
-
проверка
переменной
на
равенство
нулю
(или
nullptr).
Для
этого
просто
удалите
явное
упоминание
о
сравне
нии.
Например:
void do_something(vector<int>& |
|
j |
|
if |
(auto n = v.size(}) |
v)
11
} 11
. . .
Оказываемся
здесь,
если
п
!
=О
...
Предпочтительно использование простой формы записи.
по
возможности
этой
более
краткой |
и |
1.9.
Отображение
на
аппаратные
средства
С++ предлагает непосредственное сопоставление с оборудованием. Когда вы используете одну из базовых операций, реализация представляет собой то, что предлагает оборудование (как правило, отдельную машинную операцию). Например, сложение двух int, х+у, выполняет машинную команду целочис
ленного сложения.
Реализация С++
рассматривает
память
компьютера
как
последователь
ность
ячеек
памяти,
в
которых
можно
размещать
(типизированные)
объекты
и
адресовать
их с
помощью
указателей.
[6]
[7]
[8] [9]
[1О]
[11]
[12]
[13] [14) [ 15) [16)
[17) [ 18) [19)
[20) [21) [22]
[23]
[24] [25) [26)
[27]
[28)
|
|
|
|
|
|
|
|
|
|
|
|
|
1.1 О. Советы |
39 |
||
"Упаковывайте" |
значимые |
операции |
в |
тщательно |
именованные |
функ |
||||||||||
ции; §1.3; [CG:F.I]. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
Функция |
должна выполнять единственную логическую операцию; §1.3 |
|||||||||||||||
[CG:F.2]. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функции |
должны быть |
краткими; §1.3; [CG:F.3]. |
|
|
|
|
|
|||||||||
Используйте |
перегрузку, когда функции |
выполняют |
концепrуально оди |
|||||||||||||
наковые задачи с разными |
типами; |
§1.3. |
|
|
|
|
|
|
||||||||
Если может |
потребоваться вычисление |
функции во |
время компиляции, |
|||||||||||||
объявите ее |
как constexpr; §1.6; [CG:F.4]. |
|
|
|
|
|
||||||||||
Следует понимать, как |
примитивы |
языка отображаются |
на аппаратное |
|||||||||||||
обеспечение; |
§1.4, §1.7, |
§1.9, §2.3, §4.2.2, §4.4. |
|
|
|
|
|
|||||||||
Применение |
разделителей |
между цифрами числа |
делает |
литералы бо- |
||||||||||||
лее удобочитаемыми; |
§1.4; [CG:NL.11 ]. |
|
|
|
|
|
|
|||||||||
Избегайте усложненных выражений; |
[CG:ES.40]. |
|
|
|
|
|
||||||||||
Избегайте сужающих преобразований; §1.4.2; [CG:ES.46]. |
|
|||||||||||||||
Минимизируйте область видимости переменной; §1.5. |
|
|
||||||||||||||
Избегайте "магических |
констант"; используйте символические констан- |
|||||||||||||||
ты;§1.6; [CG:ES.45]. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
Предпочитайте |
неизменяемые данные; §1.6; [CG:P. IО]. |
|
|
|||||||||||||
Объявляйте |
в каждом |
объявлении (только) одно имя; |
[CG:ES.10). |
|
||||||||||||
Поддерживайте |
часто |
используемые |
и |
локальные |
|
имена короткими, а |
||||||||||
редкие и нелокальные-длинными; |
[CG:ES.7]. |
|
|
|
|
|
||||||||||
Избегайте одинаково выглядящих имен; [CG:ES.8). |
|
|
|
|
|
|||||||||||
Избегайте имен |
ПРОПИСНЫМИ_БУКВАМИ; [CG:ES.9]. |
|
|
|
|
|||||||||||
Предпочитайте |
синтаксис |
инициализации с использованием фигурных |
||||||||||||||
скобок { } для объявлений |
с именованными типами; §1.4; [CG:ES.23]. |
|||||||||||||||
Используйте |
auto, чтобы избежать повторения |
имен |
типов; |
§1.4.2; |
||||||||||||
[CG:ES.11]. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Избегайте неинициализированных |
переменных; §1.4; [CG:ES.20). |
|
||||||||||||||
Поддерживайте |
области видимости малыми; §1.5; [CG:ES.5]. |
|
||||||||||||||
При объявлении переменной в |
условии инструкции |
i f предпочитайте |
||||||||||||||
версии с неявной проверкой на |
равенство О; §1.8. |
|
|
|
|
|
||||||||||
Применяйте |
unsigned только |
для |
работы с битами; |
§1.4; [CG:ES.101], |
||||||||||||
[CG:ES.106]. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Применение |
указателей |
должно |
быть простым |
|
и |
понятным; |
§1.7; |
|||||||||
[CG:ES.42). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|