我只是发现这小部分C++代码在clang++和g++中给我的结果不一样:
#include <iostream>
#include <string>
using namespace std;
const string& createString(char c) {
static string s;
s="";
for(int i=0; i<10; ++i) {
s+=c;
}
return s;
}
int main() {
cout << createString('a') << ' ' << createString('z') << endl;
return 0;
}
使用clang++时,它写道:
就像我想要的那样,但是使用g++时会这样写:
为什么会这样呢?是否符合g++实现标准?
如果我希望函数通过引用返回一个临时的“大”类型(如此处所示)以避免不必要的复制,该怎么办?
最佳答案
不会的RVO和NRVO可以轻松地解决此问题。另外,移动语义。简而言之,按值返回std::string
完全没有问题。