gpt4 book ai didi

C++ 索引评估方向

转载 作者:太空狗 更新时间:2023-10-29 19:40:10 24 4
gpt4 key购买 nike

考虑以下代码:argv[1][2]

C++ 如何处理索引评估?例如,从左到右:[1] 在 [2] 之前求值,从右到左:[2] 在 [1] 之前求值,还是取决于所使用的编译器?

最佳答案

严格来说,argv[1][2] 中有许多计算(相当于 (argv[1])[2] )

  1. 评估argv
  2. 评估 1
  3. 评估2
  4. 评估argv[1]
  5. 评估argv[1][2]

运算符表达式在不知道其操作数的值是什么的情况下无法真正求值,因此#1 和#2 必须发生在#4 之前,而#3 和#4 必须发生在#5 之前。

当然,“evaluate 1”没有太多意义,因为它只是一个已知的字面值。但是,如果表达式类似于 argv[f1()][f2()],那么子表达式求值的顺序就很重要。

在直到 C++14 的 C++ 版本中,argv[f1()][f2()] 中未指定是 f1() 还是 f2() 首先被调用。 C++17 对子表达式的顺序引入了许多额外的保证,包括数组下标的规则:在 A[B] 中,子表达式 A 的所有计算和副作用> 现在发生在子表达式 B 的所有求值和副作用之前。因此,在这种情况下,C++17 保证 f1() 将在 f2() 之前被调用。

关于C++ 索引评估方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331994/

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