通过引用传递的引用返回向量的效用

Ben*_* D. 3 c++ string vector pass-by-reference

我最近看到以下代码块作为对这个问题的回答:在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;
}
Run Code Online (Sandbox Code Playgroud)

为什么返回传递的引用数组"elems"在这里如此重要?我们不能使这个为void函数,或者返回一个整数来表示成功/失败吗?我们正在编辑实际的阵列,对吧?

谢谢!

Dou*_* T. 6

通过返回对传入的对象的引用,您可以在一个表达式中进行一些链接或级联,并始终使用相同的向量.有些人觉得这个很有用:IE

  std::vector<std::string> elems;
  std::cout << "Number of items:" << split("foo.cat.dog", '.', elems).size();

  // get just foo
  std::cout << "First item is:" << split("foo.cat.dog", '.', elems)[0];

  // change first item to bar
  split("foo.cat.dog", '.', elems)[0] = "bar";
Run Code Online (Sandbox Code Playgroud)