C++   ::   Хилл Мюррей

Страница: 262 из 357

Помимо этого, "«" находится на большинстве клавиатур как раз на ",", и у людей получаются операторы вроде такого:

cout « x , y , z;

Для таких операторов непросто выдавать хорошие сообщения об ошибках.

Операции «„ и “» к такого рода проблемам не приводят, они асимметричны в том смысле, что их можно проассоциировать с "в" и «из», а приоритет «« достаточно низок, чтобы можно было не использовать скобки для арифметических выражений в роли операндов. Например:

cout «„ „a*b+c=“ «« a*b+c «« «\n“;

Естественно, при написании выражений, которые содержат операции с более низкими приоритетами, скобки использовать надо. Например:

cout «„ „a^b!c=“ «« (a^b!c) «« «\n“;

Операцию левого сдвига тоже можно применять в операторе вывода:

cout «„ „a««b=“ «« (a««b) «« «\n“;

В С++ нет выражений с символьными значениями, в частноти, '\n' является целым (со значением 10, если используется набор символов ASCII), поэтому

cout «« "x = " «« x «« '\n';

напечатает число 10, а не ожидаемый символ новой строки. Эту и аналогичные проблемы можно сгладить, определив несколко макросов (в которых используются стандартные имена симвлов ASСII):

#define sp «„ " " #define ht „« «\t“ #define nl «« «\n“

Теперь предыдущий пример запишется в виде:

cout «« "x = " «« x nl;

Для печати символов предоставляются функции ostream::put (char) и chr(int) (см. #8.2.4). Хотя в некоторых кругах нсинтаксические макросы считаются худшим видом макросов, мне они нравятся.

|< Пред. 260 261 262 263 264 След. >|

Java книги

Контакты: [email protected]