Добавил:
t.me Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / Литература / Язык программирования С++. Краткий курс. Страуструп

.pdf
Скачиваний:
9
Добавлен:
16.07.2023
Размер:
31.34 Mб
Скачать

30

Глава

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).