【发布时间】:2016-09-28 14:38:53
【问题描述】:
我有以下代码,我使用的是 GCC 和 C++11:
std::string system_call(const char *cmd){
std::string a;
...
return a;
}
std::string st = system_call("whatever code");
那里有隐式副本吗?
我多次调用这个函数,我猜它是从system_call的返回值复制到变量st,然后释放临时r值。
有什么办法可以避免复制吗?在编译器中使用st.swap(system_call()) 抛出和错误:
错误:没有匹配的调用函数 'std::basic_string::swap(std::string)'
我的问题是:
- 是否有问题
- 如何避免,如果有的话
谢谢
编辑: 找到了一种使显式交换工作的方法。但是正确的答案没有任何好处,因为编译器已经将 st 替换为返回值,没有任何副本。
system_call("whatever").swap(st);
【问题讨论】: