gpt4 book ai didi

c++ - 是否返回语句复制值

转载 作者:IT老高 更新时间:2023-10-28 13:21:03 25 4
gpt4 key购买 nike

由于范围问题,我对此感到疑惑。例如,考虑代码

typedef struct {
int x1;/*top*/
int x2;/*bottom*/
int id;
} subline_t;



subline_t subline(int x1, int x2, int id) {
subline_t t = { x1, x2, id };
return t;
}

int main(){
subline_t line = subline(0,0,0); //is line garbage or isn't it? the reference
//to subline_t t goes out of scope, so the only way this wouldn't be garbage
//is if return copies
}

所以我的问题是,return 语句会一直复制吗?在这种情况下,它似乎有效,所以我被引导相信 return 确实复制了。如果它确实复制,它会在每种情况下都复制吗?

最佳答案

是的,在这种情况下,我们会制作一份拷贝。如果您像这样更改函数声明:

subline_t &subline(int x1, int x2, int id) {

那么不会复制。但是,在您的特定情况下,返回对堆栈上分配的对象的引用是无效的。问题是对象在调用者有机会使用它之前就被破坏并失效。

这与常见的Return Value Optimization有关对于可以避免在您描述的情况下执行实际复制操作的 C++。最终结果(或应该)与完成复制一样,但您应该注意优化。在某些情况下,这种优化的存在可以改变程序的可观察行为。

关于c++ - 是否返回语句复制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1529447/

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