我只是发现这段 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++ 实现标准?如果我想让一个函数像这里一样通过引用返回一个临时的“大”类型以避免无用的复制,我该怎么办?