gpt4 book ai didi

无法理解嵌套三元运算符

转载 作者:行者123 更新时间:2023-11-30 18:22:25 25 4
gpt4 key购买 nike

int main(void)
{
int i = 10, j =20;
j = i, j ? (i, j) ? i : j : j;
printf("%d %d", i, j);
return 0;
}

输出是什么?

请有人指导我如何解释这种情况下的嵌套三元运算符。

最佳答案

C是由语言语法定义的;优先级表是将语法方便地压缩为人类一眼就能理解的东西,但它并不完全对应于语法指定的内容。

您可能需要查阅语言语法才能解决三元运算符的关联性。就我个人而言,我总是明确使用括号,以便非语言律师的读者仍然可以理解正在发生的事情(这样我就不会犯错误)。

一个例子是:

c ? c = a : c = b

必须解析为

(c ? c = a : c) = b

这在 C 中是非法的,因为三元运算符不给出左值。顺便说一下,C++ 语法是不同的;在该语言中,这被解析为

c ? c = a : (c = b)

这是合法的; C++ 中三元运算符也可以给出左值。

就您而言,问题是以下哪一项:

Z = ((i , j) ? X : Y)
Z = (i , (j ? X : Y))
(Z = i, j) ? X : Y
(Z = i), (j ? X : Y)

我相信后者在这里是正确的,因此您最终应该得到 j = i 加上一个没有副作用的表达式。

关于无法理解嵌套三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21303786/

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