将未存储在变量中的参数在运行时复制吗?

时间:2015-09-08 19:30:05

标签: c++

我有以下代码:

#include <iostream>
#include <string>

using namespace std;

void foo(string input){
    //perform operations...
}

int main(){
    string x, y;
    cin >> x;
    cin >> y;
    foo(x + y);
    return 0;
}

foo的参数会在运行时被复制吗?换句话说,将x和y连接起来,然后复制,然后传递给foo?或者它们会被连接并传递给foo,而不会被传递给foo?

有没有办法测试这个?我不确定要搜索什么,因此如果类似的问题已经存在,则会感​​谢链接

2 个答案:

答案 0 :(得分:2)

  

将x和y连接起来,然后复制,然后传递给foo?或者它们会被连接并传递给foo而不被复制?

这完全取决于编译器。两者都是有效的行为。启用优化后,很可能省略了副本。

  

有没有办法测试这个?

是。使用你自己的类在其构造函数中打印一些东西。

答案 1 :(得分:1)

首先,让我们确定要进行连接,必须将两个原始字符串的副本转换为临时字符串(否则完整的连接值会在哪里?)。

然后,理论上会复制一份副本以传递给您foo函数。但是,如果希望,编译器允许(但不是必需) elide 此副本。这两种行为都符合标准,不应影响您的设计。