この小さな 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++ 実装規格に準拠していますか? 無駄なコピーを避けるために、ここのように関数が参照によって一時的な「大きな」型を返すようにしたい場合はどうすればよいですか?