其他分享
首页 > 其他分享> > c – 返回值总是暂时的吗?

c – 返回值总是暂时的吗?

作者:互联网

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的复制构造函数的参数.

我错了吗?
这与copy elision有关吗?

解决方法:

您引用它的页面描述了特定的行为
编译器.形式上:返回值始终是暂时的.在
将临时用作副本的参数的上下文
构造函数(对象被复制),标准给出了显式
授权编译器删除副本,“合并”
它正在初始化的命名变量临时.一切
你引用的句子是说这个特定的编译器总是如此
他的优化(和大多数其他编译器一样).

标签:temporary-objects,c
来源: https://codeday.me/bug/20190726/1540189.html