cout是否需要以分号结束?

时间:2011-01-13 01:26:16

标签: c++ cout comma-operator

我正在阅读Bjarne Stroustrup的编程:使用C ++的原理和实践

在第2章的练习部分中,它讨论了在编译hello_world程序时查看输入错误的各种方法

#include "std_lib_facilities.h"

int main()  //C++ programs start by executing the function main
{
    cout << "Hello, World!\n",  // output "Hello, World!"
    keep_window_open();         // wait for a character to be entered
    return 0;
}

特别是本节要求:

  

想想你至少还有五个错误   可能已经打字了   程序(例如忘记   keep_window_open(),留下上限   键入单词时锁定键,或   输入逗号而不是分号   并尝试每一个看看会发生什么   你试着编译并运行它们   版本

对于cout行,您可以看到有逗号而不是分号。
这编译并运行(对我来说)。它是否已作出假设(如在javascript问题:Why use semicolon?中)该语句已被终止?

因为当我尝试keep_terminal_open();时,编译器会通知我分号排除。

4 个答案:

答案 0 :(得分:11)

C ++中的逗号运算符可以按如下方式使用:

a, b;

这意味着“执行a,忽略结果,然后执行b。”你可以像这样链接起来:

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

一般来说,这不是好的风格。逗号运算符很少在实践中使用,因为它令人困惑。有几次它合法有用通常会出现for循环:

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

在这里,我们在for循环的最后部分使用逗号运算符来表示“递增ab。”

要回答你的问题,是的,你应该在cout之后加一个分号。使用逗号运算符在技术上也可以正常工作,但它不够优雅,可能会让人感到困惑。

答案 1 :(得分:3)

任何陈述都需要用分号终止:

std::cout << "Hi world";

但是,除其他外,表达式可以采用A,B,C的形式,其中AB以及C进行评估,然后C成为结果。

如果您输入以下表达式:

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

发表声明:

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

然后看起来你在语句结尾处不需要分号。实际上发生的事情是你误解了“陈述”到底是什么。

希望这会有所帮助。

答案 2 :(得分:1)

它应该以一个终止,是

答案 3 :(得分:0)

只是解释一下情况的其他几个方面......

逗号运算符具有任何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';
}

...将在注释A的行输出“5”,从B输出“2”。

由于这个优先级,请注意如果 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().