gpt4 book ai didi

c++ - 这是未定义的行为吗?为什么?

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

请解释此代码正确或不正确的原因:在我看来,行++*p1 = *p2++ 具有未定义的行为,因为 p1 首先被取消引用然后递增。

int main()
{
char a[] = "Hello";
char b[] = "World";

char* p1 = a;
char* p2 = b;

//*++p1 = *p2++; // is this OK?
++*p1 = *p2++; // is this OK? Or this is UB?

std::cout << a << "\n" << b;

return 0;
}

最佳答案

第一个没问题

*++p1 = *p2++ // p1++; *p1 = *p2; p2++;

第二个是 C++ 的 UB,因为您正在修改 p1 指向的内容两次(一次是因为递增,一次是因为赋值),并且没有序列点分隔这两个副作用。

对于 C++0x 规则,事情有所不同,解释和理解起来也更加复杂。如果你故意编写像第二个那样的表达式,如果它不是为了代码高尔夫比赛,如果你是在为我工作,那么就认为你自己被解雇了(即使这在 C++0x 中是合法的)。

我不知道它在 C++0x 中是否合法,我也不想知道。我的神经元太少,不能这样浪费它们。

关于c++ - 这是未定义的行为吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848364/

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