gpt4 book ai didi

c++ - 混淆输出?

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

我不明白为什么代码在 VS2010(发布版本)中打印“3”,无论我是保留“r”的声明还是将其注释掉。

int main(){
int arr1[2];
int &r = arr1[0];
int arr2[2];

cout << (&arr1[1] - &arr2[0]);
}

那么,三个问题:

一个。为什么代码打印 3?

为什么即使存在“r”声明它也打印 3? (是不是因为C++中引用是否占用存储是实现定义的?)

此代码是否具有未定义的行为或实现定义的行为?

最佳答案

因为在 Release build 中删除了 r 变量。删除了未使用的内置类型变量,因为发布构建是通过优化完成的。稍后尝试使用它,结果会改变。一些变量可能被放入 CPU 寄存器而不是堆栈,这也改变了另一个局部变量之间的距离。

另一方面,未使用的类实例不会被删除,因为创建类实例可能会产生副作用,因为会调用构造函数。

这既是未定义的又是实现定义的行为,因为编译器可以自由地将变量放在任何合适的地方。

关于c++ - 混淆输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3619192/

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