4
我只是偶然发现了Evan Teran在Split a string in C++?上的回答,他在其中引用了一个向量,修改它并返回它的引用。在这种情况下返回参考是否是一种很好的风格?
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
这是不错的风格吗?我看到的好处是直接使用的结果,就像在
std::vector<std::string> vec;
unsigned int uiSize = split("ssad asda", ' ', vec).size();
,而不是
std::vector<std::string> vec;
split("ssad asda", ' ', vec);
unsigned int uiSize = .size()
有什么缺点?据我所知,返回引用的主要原因是人们可能会返回一个在返回后被破坏的局部变量的引用。这不适用于此,因为对象不是本地的,而是作为参数提供给方法。
我看到这个用例返回引用没有问题。它就像'operator <<' – Garf365
这是一个合理的事情,用于链接命令。例如,这种方法用于'operator <<'打印。对于函数调用而非运算符仍然有用。 – BoBTFish