【发布时间】:2016-03-03 08:59:35
【问题描述】:
我刚刚偶然发现了 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<< -
这是一个合理的做法,用于链接命令。例如,这种方法用于
operator<<进行打印。对于函数调用而不是运算符仍然有用。
标签: c++ pass-by-reference