gpt4 book ai didi

c++ - 返回值总是临时的吗?

转载 作者:太空狗 更新时间:2023-10-29 20:06:11 26 4
gpt4 key购买 nike

This页面说了一件奇怪的事:-

仅当您的程序不将返回值复制到对象时才会创建临时对象,并且给出的示例是

UDT Func1(); // Declare a function that returns a user-defined type.
...

Func1(); // Call Func1, but discard return value.
// A temporary object is created to store the return
// value

但如果我已经完成了:-

UDT obj=Fuct1;

在我看来,它还会创建一个临时文件,如下所示:-

Func() 构造一个本地对象。接下来,这个本地对象在调用者的堆栈上进行复制构造,生成一个用作 obj 的复制构造函数的参数的临时对象

我错了吗?
这与复制省略有关吗?

最佳答案

您引用的页面是对特定行为的描述编译器。形式上:返回值始终是临时的。在该临时文件用作拷贝参数的上下文构造函数(对象被复制),标准给出显式授权编译器删除拷贝,“合并”具有正在初始化的命名变量的临时变量。一切你引用的句子是这个特定的编译器总是这样做他的优化(与大多数其他编译器一样)。

关于c++ - 返回值总是临时的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029368/

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