gpt4 book ai didi

c++ - 如果 (a) b = c, d = e, return; 为什么这将无法编译?

转载 作者:可可西里 更新时间:2023-11-01 18:01:14 26 4
gpt4 key购买 nike

我沉迷于“无手镯”ifs,就像这样:

if (a) b++, c++, d = e; 

但是一件烦人的事情是return 不能成为最后一部分的一部分。凭直觉我觉得这是为什么,但谁能用编程语言术语解释为什么这不会编译?

main() {
int a, b, c, d, e;
if (a) b = c, d = e, return;
}

如果您关心,请同时解释为什么这样设计,这对我来说似乎是一个缺陷。我可以用 C 理解,但在 C++ 中它可以被重新设计,而不会与现有的 C 代码发生重大兼容性损失。

只是为了比较:这些将编译并完全按照预期执行:

while (a < 10) a++, b--, c += 2;

while (a < 10) if (a == 5) half = a, save();

最佳答案

“逗号”运算符就是一个运算符。左右两边必须是表达式,return不是表达式。

详细来说,逗号运算符首先计算其左侧,然后丢弃该值。然后,它评估其右侧,整个逗号表达式评估为右侧的值。

类似这样的:

template <typename T, typename U>
U operator,(T t, U u)
{
return u;
}

因此,您不能将任何不是表达式本身的内容放在逗号表达式中。

如果您希望同时执行一系列语句并将它们组合在一起,这正是 ;{} 的用途。没有理由在逗号运算符中复制该行为。

关于c++ - 如果 (a) b = c, d = e, return; 为什么这将无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765045/

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