繁体   English   中英

c++ 临时 object 问题

[英]c++ Temporary object question

这两个函数之间创建的临时对象的数量是否存在差异?

string foo1() {
    return "";
} 

string foo2() {
    string s = "";
    return s;
}

这是一个家庭作业问题,所以请假设没有编译器优化。

不——只创建一个临时的。 function 的堆栈上的 object 不是临时的,它是一个左值。 字符串文字也是一个左值。 两者都涉及完全相同的过程-返回从左值构造的字符串。

是的。 如果没有任何优化,即 NRVO(命名为返回值优化),第二个代码将产生 2 个临时代码,而第一个代码将产生一个。

没有不同。 在这两种情况下,都会创建一个新字符串 object(1 - 隐式,2 - 显式)。


两个示例都执行以下操作: 1. 将空字符串的指针压入堆栈(或将其写入寄存器)。 2. 创建字符串 class 的新实例(使用指定的字符串)。 3. 将新建实例的指针写入 EAX(结果)


抱歉,这是 C++ 问题,而我想到了 C# :)

这意味着字符串 class 的实例将被复制(不是由指针返回)。 无论如何,这两个示例都只创建了一个字符串 class 的实例(1 - 隐式,2 - 显式),然后该实例(临时对象)的所有字节将作为结果推入堆栈。

答案:没有区别,只有一个临时的 object(前提是没有应用编译器优化)。

注意:在这两种情况下,编译器都会在堆栈中分配相同数量的字节来存储字符串 class 的实例,并且“”(空字符串)已经加载到 memory(未分配)。 唯一的区别是第一个示例隐式创建了字符串 class 的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM