gpt4 book ai didi

c++ - 在 C++17 中,这段代码应该产生警告吗?

转载 作者:行者123 更新时间:2023-12-01 14:36:40 26 4
gpt4 key购买 nike

如上图所示 link

c++14 模式(但不是 c++17)中的 clang 和 c++17 模式中的 GCC 会产生有关排序的警告。我假设在 C++17 中,= 的 rhs 上的所有内容都在 lhs 之前求值,所以我不确定 gcc 警告是否正确。

Code is:
static int index =0;
void f(int* pindex){
pindex[index] = 5;
pindex[index] = index++;

}
int main(){

}

gcc 警告是:

: 在函数 'void f(int*)' 中:
:4:30: warning: operation on 'index' may be undefined[-Wsequence-point]
4 |         pindex[index] = index++;

| ~~~~~^~
:4:30: warning: operation on 'index' may be undefined[-Wsequence-point]

Compiler returned: 0

注意:我知道标准没有指定任何关于警告的内容,只是通过警告指定问题比谈论序列点/顺序保证要容易得多。

最佳答案

此代码可能会在 C++17 之前产生警告,因为它是未定义的行为,但在 C++17 或更高版本中不应产生警告,因为行为已定义:

  1. In every simple assignment expression E1=E2 and every compound assignment expression E1@=E2, every value computation and side-effect of E2 is sequenced before every value computation and side effect of E1 (since C++17)

( Source )

GCC 的警告是一个错误。 (希望这是唯一的错误,GCC 实际上不会将这种情况视为 UB。)

关于c++ - 在 C++17 中,这段代码应该产生警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62770533/

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