gpt4 book ai didi

c++ - 当将预增量和后增量放在像这样的单个变量上时(++i)++,它在 c++ 中有效,但在 c 中无效

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

我用值 3 初始化了变量 i,然后在代码中添加了一条语句 (++i)++。但是,在 C 中,它显示错误“需要左值作为增量操作数”。但是,如果我将这个类似的代码放入 C++ 中,它会工作并显示双增量,输出为 5。但是,我的一个 friend 尝试使用 C 编译器,它给出了输出 4。

//using c

#include <stdio.h>

int main()
{
int i=3;
(++i)++;
printf("%d",i);
return 0;
}
//using c++

#include <bits/stdc++.h>
using namespace std;

int main()
{
int i=3;
(++i)++;
cout << i << endl;
return 0;
}

我正在使用 GNU GCC 编译器。

最佳答案

已知这是未定义的行为。从语法上讲,这个程序在 C++ 中是正确的,并且编译器会生成一些二进制代码...但标准允许它生成任何代码,甚至是返回 100 或格式化磁盘的代码。在实际情况中,您可能会观察到非常奇怪的异常情况,例如编译器可以在您的 (++i)++ 语句之后删除整个代码,因为标准允许它在之后立即执行任何它想要的操作程序进入UB状态。在您的情况下,这意味着根本不会有输出(或者程序将打印“Hello World”而不是整数值)。

我相信你只是在进行一个实验。结果是:你的编译器和你 friend 的编译器都是正确的。

关于c++ - 当将预增量和后增量放在像这样的单个变量上时(++i)++,它在 c++ 中有效,但在 c 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59187721/

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