C++ 解释c+中语句和表达式之间的差异+;

C++ 解释c+中语句和表达式之间的差异+;,c++,expression,C++,Expression,我试图彻底理解陈述和表达之间的区别 但我发现,即使在阅读了这个答案之后,我也感到困惑 请看以下内容: std::cout << "Hello there? " ; std::cout 哪一个是正确的 两者:它是一个表达式语句。C和C++让你把一个表达式放进一个代码体中,添加一个分号,并把它变成一个语句。 以下是更多的例子: x++; // post-increment produces a value which you could use a = 5;

我试图彻底理解陈述和表达之间的区别
但我发现,即使在阅读了这个答案之后,我也感到困惑
请看以下内容:

std::cout << "Hello there? " ;  
std::cout
哪一个是正确的

两者:它是一个表达式语句。C和C++让你把一个表达式放进一个代码体中,添加一个分号,并把它变成一个语句。 以下是更多的例子:

x++;       // post-increment produces a value which you could use
a = 5;     // Assignment produces a value
max(a, b); // Call of a non-void function is an expression
2 + x;     // This calculation has no side effects, but it is allowed

注意,在C和C++的特定情况下,这是正确的,但在其他语言的情况下可能不成立。例如,上面列表中的最后一个表达式语句将被认为是无效的,在java或C++中。

让我们看看C++语法可以告诉我们什么:

statement:
  labeled-statement
  attribute-specifier-seq_opt expression-statement
  attribute-specifier-seq_opt compount-statement
  attribute-specifier-seq_opt selection-statement
  attribute-specifier-seq_opt iteration-statement
  attribute-specifier-seq_opt jump-statement
  declaration-statement
  attribute-specifier-seq_opt try-block

expression-statement:
  expression_opt ';'
所以这是一个声明;特别是一个“表达式语句”,它由一个(可能是空的)表达式和一个分号组成。换句话说,

std::cout << "Hello there? "

std::cout表达式的定义见C标准(6.5表达式)

1表达式是一系列运算符和操作数,用于指定 计算值,或指定对象或函数,或 产生副作用或同时产生副作用的。 运算符操作数的值计算按顺序排列 在计算运算符结果的值之前

至于表达式语句,则以分号结尾。下面是C语言中表达式语句的定义++

expression-statement:
expression opt;

缺少表达式的表达式语句称为null 声明

相对于最后一个引文,我想指出C和C++之间的区别。C++声明是语句,而C声明不是语句。因此,在C++中,可以在声明之前放置标签,而在C中可能不这样做。因此,在C语言中,必须在声明之前放置null语句。比较

C++

Label:
int x;
C

Label: ;
int x;

将@i486称之为“预定义”的可能重复项具有误导性。它是由图书馆提供的,不是由语言提供的。@波蒂,我告诉你,阅读答案> @ PuldieC和C++是不同的语言。在将C++问题标记为C的一个复制之前,前提是你知道了差异,而不是让其他人填空。OP已经阅读了语法并反其反作用。使用C进行卷积也没有帮助。
Label: ;
int x;