我有以下代码:
#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?
有没有办法测试这个?我不确定要搜索什么,因此如果类似的问题已经存在,则会感谢链接
答案 0 :(得分:2)
将x和y连接起来,然后复制,然后传递给foo?或者它们会被连接并传递给foo而不被复制?
这完全取决于编译器。两者都是有效的行为。启用优化后,很可能省略了副本。
有没有办法测试这个?
是。使用你自己的类在其构造函数中打印一些东西。
答案 1 :(得分:1)
首先,让我们确定要进行连接,必须将两个原始字符串的副本转换为临时字符串(否则完整的连接值会在哪里?)。
然后,理论上会复制一份副本以传递给您foo
函数。但是,如果希望,编译器允许(但不是必需) elide 此副本。这两种行为都符合标准,不应影响您的设计。