gpt4 book ai didi

c++ - 在 C++ 中,每个 "statement"也是一个表达式吗?

转载 作者:太空狗 更新时间:2023-10-29 23:26:18 25 4
gpt4 key购买 nike

我可以说在 C++ 中,每个语句(不带分号)也是一个表达式吗?

还有,所有的表达式,加个分号,就可以变成语句了吗?谢谢。

最佳答案

不,C++ 语句并不总是表达式。例如,for 循环不是表达式(void 类型)。所以即使使用 comma operator以下是错误的:

 /// wrong code, syntactically incorrect in C++
for (int i=0; i<5; i++) {std::cout<<i<<std::endl;}
, // this is a comma operator
x+3

(您可以将逗号运算符替换为任何其他运算符,如 +,它仍然是错误的)

当然表达式(包括赋值和调用)也可以用作语句。

注意 GCC提供,作为语言扩展statement exprs (此扩展被 Clang/LLVM 接受);这是一个简单的例子(语句表达式的值由 2*x 给出):

#include <iostream>

void f (int x) {
// notice the statement-expr starting inside ({ ... })
// the last expression inside the braces gives the value
int y = ({std::cout << "x=" << x << std::endl; 2*x;})+1;
std::cout << "y=" << y << std::endl;
}

由于 C++11 编译器不接受该扩展,您可以创建一个带有 lambda-expression 的闭包并立即应用它以获得等效的效果:

void f (int x) {
int y = ([=](){std::cout << "x=" << x << std::endl; return 2*x;})() + 1;
std::cout << "y=" << y << std::endl;
}

希望优化编译器不会费心创建中间闭包并生成等同于 GCC 可以使用语句 expr 变体(使用 g++ -O2)给出的代码

有些语言,特别是 Ocaml、Scheme、Haskell,没有语句或指令。它们只有表达式(其中一些可能有一些副作用)。

关于c++ - 在 C++ 中,每个 "statement"也是一个表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com