我正在阅读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();
时,编译器会通知我分号排除。
答案 0 :(得分:11)
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
之后加一个分号。使用逗号运算符在技术上也可以正常工作,但它不够优雅,可能会让人感到困惑。
答案 1 :(得分:3)
任何陈述都需要用分号终止:
std::cout << "Hi world";
但是,除其他外,表达式可以采用A,B,C
的形式,其中A
和B
以及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().