Нужно ли завершать cout точкой с запятой? - PullRequest
3 голосов
/ 13 января 2011

Я читаю Программирование Бьярна Страуструпа: принципы и практика использования C ++

В разделе упражнений к главе 2 рассказывается о различных способах взгляда на ошибки ввода при компиляции hello_world программы

* 1005.*

В частности, в этом разделе задается вопрос:

Подумайте, по крайней мере, о еще пяти ошибках, которые вы могли допустить, набрав в своей программе (например, забудьте keep_window_open(), оставьте клавишу Caps Lock включенной при вводеили введите запятую вместо точки с запятой) и попробуйте каждый, чтобы увидеть, что происходит, когда вы пытаетесь скомпилировать и запустить эти версии.

Для строки cout вы можете увидеть, что естьзапятая вместо точки с запятой.
Это компилируется и запускается (для меня).Делается ли предположение (как в вопросе javascript: Зачем использовать точку с запятой? ), что утверждение было прекращено?

Потому что, когда я пытаюсь ввести keep_terminal_open();, компилятор сообщает мне об исключении точки с запятой.

Ответы [ 4 ]

11 голосов
/ 13 января 2011

Оператор запятой в C ++ может быть использован следующим образом:

a, b;

Это означает «сделай a, проигнорируй результат, затем сделай b».Вы можете связать это вместе так:

a, b, c, (etc.), n;

В общем, это не считается хорошим стилем.Оператор запятой редко используется на практике, потому что это сбивает с толку.Несколько раз, когда это законно полезно, обычно приходят к циклам for:

for (int a = 0, b = 0; a < 100; a++, b++) {
    /* ... */
}

Здесь мы используем оператор запятой в последней части цикла for, чтобы означать "приращение и a и b."

Чтобы ответить на ваш вопрос, да, у вас должна быть точка с запятой после cout.Использование оператора запятой технически также работает, но оно не элегантно и может запутать людей.

3 голосов
/ 13 января 2011

Любой оператор должен заканчиваться точкой с запятой:

std::cout << "Hi world";

Однако, помимо прочего, выражение может принимать форму A,B,C, где A и B и C оцениваются, а затем C становится результатом.

Если поставить следующее выражение:

std::cout << "Hi world", 3

в утверждение:

std::cout << "Hi world", 3;

тогда похоже, что вам не нужна точка с запятой в конце оператора. На самом деле произошло то, что вы неправильно поняли, что такое «утверждение».

Надеюсь, это помогло.

1 голос
/ 13 января 2011

должно заканчиваться одним, да

0 голосов
/ 13 января 2011

Просто, чтобы объяснить несколько других аспектов ситуации ...

Оператор запятой имеет самый низкий приоритет среди всех операторов C ++, поэтому, например, код ...

#include <iostream>

int main()
{
    std::cout << 5, 2;    // outputs 5, complete line/statement evaluates to 2
    std::cout << '\n';
    std::cout << (5, 2);  // outputs 2 (5 is discarded), line evaluates to std::cout
    std::cout << '\n';
}

... будет выводить «5» в строке комментария A и «2» из B.

Из-за этого приоритета обратите внимание, что , если keep_window_open() вернул void, тогда std::cout не будет знать, как его транслировать, и вы получите ошибку компилятора из ...

std::cout << keep_window_open(); // can't compile if function return type is void

... но все равно не будете безопасны при использовании, которое вы ''повторно исследовать ...

std::cout << "Hello, World!\n",  // can compile because seen as two comma-separated
keep_window_open();              // subexpressions, so std::cout doesn't try to stream
                                 // a return value from keep_window_open().
...