我只是发现这小部分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完全没有问题。

08-27 02:00