Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

• Локальные статические объекты создаются, когда поток выполнения достигает их определения и (если они были созданы) уничтожаются в конце программы.

• Объекты в свободной памяти создаются оператором

new
и (необязательно) уничтожаются с помощью оператора
delete
.

Временная переменная, связанная с локальной ссылкой, существует столько же, сколько и сама ссылка. Рассмотрим пример.

const char* string_tbl[] = { "Mozart", "Grieg", "Haydn", "Chopin" };

const char* f(int i) { return string_tbl[i]; }

void g(string s){}

void h

{

const string& r = f(0); // связываем временную строку

// с ссылкой r

g(f(1)); // создаем временную строку

// и передаем ее

string s = f(2); // инициализируем s временной строкой

cout << "f(3): " << f(3) // создаем временную строку

// и передаем ее

<< "s: " << s

<< "r: " << r << '\n';

}

Результат выглядит следующим образом:

f(3): Chopin s: Haydn r: Mozart

Временные строки, сгенерированные при вызовах

f(1)
,
f(2)
и
f(3)
, уничтожаются в конце выражения, в котором они были созданы. Однако временная строка, сгенерированная при вызове
f(0)
, связана с переменной
r
и “живет” до конца функции
h
.

A.5. Выражения

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

m
— для имени члена;
T
— для имени типа;
p
— для выражения, создающего указатель;
x
— для выражения;
v
— для выражения
lvalue
;
lst
— для списка аргументов. Типы результатов арифметических операций определяются обычными арифметическими преобразованиями (раздел A.5.2.2). Описания, приведенные в этом разделе, касаются только встроенных операторов, а не операторов, которые программист может определить самостоятельно, хотя, определяя свои собственные операторы, следует придерживаться семантических правил, установленных для встроенных операторов (см. раздел 9.6).

Обратите внимание на то, что члены могут быть сами вложенными, поэтому можем получить такие выражения, как

N::C::m
(см. также раздел 8.7).

Оператор

typeid
и его применения не описаны в этой книге; его детали можно найти в более сложных учебниках. Обратите внимание на то, что операторы приведения не модифицируют свой аргумент. Вместо этого они создают результат своего типа, который каким-то образом соответствует значению аргумента (раздел A.5.7).

Объекты, на которые ссылается указатель

p
в инструкциях
delete p
и
delete[] p
, должны быть размещены в памяти с помощью оператора
new
(раздел A.5.6). Следует подчеркнуть, что выражение
(T)x
является менее конкретным и, следовательно, более уязвимым для ошибок, чем более конкретные операторы приведения (раздел A.5.7).

Эти инструкции в книге не рассматриваются; обратитесь к более сложным учебникам.

Если

y==0
, то результат выражений
x/y
и
x%y
не определен. Если переменная
x
или
y
является отрицательной, то результат выражения
x%y
является отрицательным.

Для встроенных типов операторы

>>
и
<<
означают сдвиг битов (см. раздел 25.5.4). Если левым операндом является объект класса
iostream
, то эти операторы используются для ввода и вывода (см. главы 10-11).

Результатом оператора сравнения является значение типа

bool
.

Обратите внимание на то, что

x!=y
эквивалентно
!(x==y)
. Результат оператора равенства имеет тип
bool
.

Оператор

&
(как и операторы
^
,
|
,
~
,
>>
и
<<
) возвращает комбинацию битов. Например, если переменные
a
и
b
имеют тип
unsigned char
, то результат выражения
a&b
имеет тип
unsigned char
, в котором каждый бит является результатом применения оператора
&
к соответствующим битам переменных
a
и
b
(раздел A.5.5).

  • Читать дальше
  • 1
  • ...
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: