什么是c ++中的表达式和表达式语句?

use*_*451 27 c++

我已经读过,通常c ++中的语句以分号结尾; 这可能有助于解释表达式语句的含义.但那么你举一个例子,你会称之为表达式?

在这种情况下,只是语句或表达式语句或表达式?

int x;
x = 0;
Run Code Online (Sandbox Code Playgroud)

Mat*_*haq 26

这些是表达式(还记得数学吗?):

1
6 * 7
a + b * 3
sin(3) + 7
a > b
a ? 1 : 0
func()
mystring + gimmeAString() + std::string("\n")
Run Code Online (Sandbox Code Playgroud)

以下是所有陈述:

int x;                            // Also a declaration.
x = 0;                            // Also an assignment.
if(expr) { /*...*/ }              // This is why it's called an "if-statement".
for(expr; expr; expr) { /*...*/ } // For-loop.
Run Code Online (Sandbox Code Playgroud)

声明通常由表达式组成:

if(a > b)           // a > b is an expr.
    while(true)     // true is an expr.
        func();     // func() is an expr.
Run Code Online (Sandbox Code Playgroud)

  • @Barnack `x = 0` 是一个表达式;`x = 0;` 是一个语句。 (3认同)

Kei*_*son 24

一个表达式是(这是在C++标准给出的定义)"运算符和操作数,指定计算的序列".例子是42,2 + 2,"hello, world",和func("argument").赋值是C++中的表达式; 函数调用也是如此.

我没有看到术语"语句"的定义,但基本上它是执行某些操作的一大块代码.示例是复合语句(由{......中包含的零个或多个其他语句组成}),if语句,goto语句,return语句和表达式语句.(在C++中,但在C语言中,声明被归类为语句.)

术语语句和表达式由语言语法非常精确地定义.

一个表达式语句是一种特殊的语句.它由一个可选表达式和一个分号组成.评估表达式并丢弃任何结果.通常这在语句有副作用时使用(否则没有多大意义),但你可以有一个表达式语句,其中表达式没有副作用.例如:

x = 42; // the expression happens to be an assignment

func("argument");

42; // no side effects, allowed but not useful

; // a null statement
Run Code Online (Sandbox Code Playgroud)

null语句是一种特殊情况.(我不确定为什么会这样对待;在我看来,它更适合作为一种消极的陈述.但这就是标准定义它的方式.)

注意

return 42;
Run Code Online (Sandbox Code Playgroud)

是一个陈述,但它不是一个表达陈述.它包含一个表达式,但表达式(加上;)不构成整个语句.


ilg*_*aar 11

要理解什么是表达式语句,首先应该知道什么是表达式,什么是语句.

编程语言中的表达式是编程语言解释的一个或多个显式值,常量,变量,运算符和函数的组合(根据其特定的优先级和关联规则)并计算生成("返回") ,在有状态的环境中)另一个价值.与数学表达式一样,这个过程称为评估.

资料来源:https://en.wikipedia.org/wiki/Expression_(computer_science)

换句话说,表达式是一种数据项.它们可以包含单个或多个实体,如常量和变量.这些实体可以由运营商相互关联或相互连接.表达可能有也可能没有副作用,因为它们通过改变状态的计算来评估某些东西.例如数字,看起来像数学公式和计算,赋值,函数调用,逻辑评估,字符串和字符串操作的东西都被认为是表达式.

函数调用:根据MSDN,函数调用被认为是表达式.函数调用是一个表达式,它将控制和参数(如果有的话)传递给函数,并具有以下形式: expression (expression-list opt)由( )函数运算符调用.

来源:https://msdn.microsoft.com/en-us/library/be6ftfba.aspx

表达式的一些示例是:

46
18 * 3 + 22 / 2
a = 4
b = a + 3
c = b * -2
abs(c)
b >= c
c
"a string"
str = "some string"
strcat(str, " some thing else")
str2 = "some string" + " some other string" // in C++11 using string library
Run Code Online (Sandbox Code Playgroud)

语句是程序的片段,它按顺序执行并使计算机执行某些确定的操作.一些C++语句类型是:

  • 表达陈述;
  • 复合语句;
  • 选择陈述;
  • 迭代语句;
  • 跳转声明;
  • 声明;
  • 尝试块;
  • 原子和同步块(TM TS).

资料来源:http://en.cppreference.com/w/cpp/language/statements

我读过c ++中通常用semicon结尾的语句;

是一般!但不总是.考虑下面的一段代码,它是一个复合语句但不以分号结尾,而是包含在两个花括号之间:

{   // begining of a compound statement
    int x;    // A declaration statement
    int y;
    int z;
    x = 2;    // x = 2 is an expression, thus x = 2; with the trailing semicolon is an expression statement
    y = 2 * x + 5;
    if(y == 9) {    // A control statement
        z = 52;
    } else {        // A branching statement of a control statement
        z = 0;
    }
 }    // end of a compound statement
Run Code Online (Sandbox Code Playgroud)

到目前为止,正如您可能猜测的那样,表达式语句是具有表达式后跟分号的任何语句.根据MSDN,表达式语句是一个导致表达式被计算的语句.由于表达式语句,不会发生控制或迭代的转移.

资料来源:https://msdn.microsoft.com/en-us/library/s7ytfs2k.aspx

表达式语句的一些示例:

x = 4;
y = x * x + 10;
radius = 5;
pi = 3.141593;
circumference = 2. * pi * radius;
area = pi * radius * radius;
Run Code Online (Sandbox Code Playgroud)

因此,以下不能被视为表达式语句,因为它们通过调用函数将控制流转移到程序的另一部分:

printf("The control is passed to the printf function");
y = pow(x, 2);
Run Code Online (Sandbox Code Playgroud)

副作用:副作用是指对状态的修改.例如更改变量的值,在显示用户界面中的菜单的磁盘上写入一些数据等.

资料来源:https://en.wikipedia.org/wiki/Side_effect_(computer_science)

请注意,表达式语句不需要有副作用.那就是他们不必改变或修改任何状态.例如,如果我们将程序的控制流视为可以修改的状态,则以下表达式语句将不会对程序的控制流产生任何副作用:

a = 8;
b = 10 + a;
k++;
Run Code Online (Sandbox Code Playgroud)

以下表达式语句会产生副作用,因为它会将控制流传递给sqrt()函数,从而改变状态:

d = sqrt(a);    // The control flow is passed to sqrt() function
Run Code Online (Sandbox Code Playgroud)

如果我们将变量的值也视为状态,修改它将是副作用,因此上面的所有表达式语句都有副作用,因为它们都修改状态.没有任何副作用的表达式语句不是很有用.请考虑以下表达式语句:

x = 7;  // This expression statement sets the value of x to 7
x;      // This expression statement is evaluated to 7 and does nothing useful 
Run Code Online (Sandbox Code Playgroud)

在上面的例子x = 7;中,我们是一个有用的表达式语句.它通过=赋值运算符将x的值设置为7 .但x;评估为7,它没有做任何有用的事情.