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