gpt4 book ai didi

c++ - 临时对象是如何存储和处理的?

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:17 24 4
gpt4 key购买 nike

考虑这个例子:

int a = 5;
int b = 10;
int c = a + b; //where is the value of (a+b) stored?
a = a + b; //how about now?

我的理解是,临时对象的处理方式类似于新的局部变量,即它们位于堆栈的顶部。但是在我的示例的第 3 行中,(a+b) 是否会直接提升为 c?还是复制的?并且会在第4行复制到a的位置吗?

编辑:修复语法错误。我为什么要关心?因为我正在寻找一般答案,例如当我不使用 int 而是使用大对象或堆对象的包装器时。

最佳答案

C++ 编译器可以按照“as-if”规则编译代码:也就是说,您编写的源代码描述了程序的意图,而不是编译后的代码。

因此,编译器可能会将您的代码重构为

int b = 10;
int c = 15;
int a = 15;

或者,根据变量的任何后续使用,它可能会省略它们。最后,请注意堆栈 是一个实现概念而不是语言概念。除了几个 C++ 标准库函数,C++ 标准本身根本没有提到堆栈。

关于c++ - 临时对象是如何存储和处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49936455/

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