3

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

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

#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(),在输入单词时保持 Caps Lock 键打开,或输入逗号而不是分号)并尝试每个错误,看看当你尝试时会发生什么编译并运行这些版本。

对于该cout行,您可以看到有一个逗号而不是分号。
这编译并运行(对我来说)。是否假设语句已终止(如在 javascript 问题中:为什么使用分号? )?

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

4

4 回答 4

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. 从技术上讲,使用逗号运算符也可以,但它不雅,并且可能会使人们感到困惑。

于 2011-01-13T01:30:17.513 回答
3

任何语句都需要以分号结尾:

std::cout << "Hi world";

但是,除其他外,表达式可以采用A,B,C、 whereABand的形式C进行计算,然后C成为结果。

如果你把下面的表达式:

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

声明:

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

那么看起来您不需要在语句末尾的分号。实际上发生的事情是您误解了“声明”的真正含义。

希望这有帮助。

于 2011-01-13T01:33:26.957 回答
1

它应该以一个终止,是的

于 2011-01-13T01:27:52.837 回答
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()返回voidstd::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().
于 2011-01-13T05:45:17.030 回答