c ++临时对象问题

yto*_*ano 1 c++ temporary-objects

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

string foo1() {
    return "";
} 

string foo2() {
    string s = "";
    return s;
}
Run Code Online (Sandbox Code Playgroud)

这是一个功课问题所以请假设没有编译器优化.

Pup*_*ppy 6

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