什么'&'课后名字是什么意思?

时间:2017-07-18 17:22:13

标签: c++11

#include <bits/stdc++.h>

int main () {
  std::string foo = "string_1";
  std::string bar = "string_2";
  std::vector<std::string> myvector;

  myvector.push_back (foo);
  myvector.push_back (std::move(bar));
  for (std::string x:myvector) 
    std::cout << x << '\n' ;
}

当我交换

时,该代码的不同之处
  for (std::string x:myvector)

有关?

  for (std::string& x:myvector)

我猜我有很多地方可以找到,但我不知道这个措施的名称是什么,所以我不知道我是什么应该搜索。如果它对你来说更容易,那么链接到解释就足够了。
编辑:
它之间的差异是什么:

for(auto x:my_vector)

for(auto& x:my_vector)

for(auto&& x:my_vector)

1 个答案:

答案 0 :(得分:2)

  

'&amp;'是什么课后名字是什么意思?

&符号是声明中类型的一部分,表示该类型是引用。引用是一种间接形式,类似于指针。

  

之间的差异是什么:

for(auto x:my_vector)

循环变量是非引用。它将包含容器中对象的副本。

for(auto& x:my_vector)

循环变量是左值引用。由于变量引用容器中的对象,因此可以通过该引用修改它们。这也避免了复制对象,如果副本很昂贵,这可能是有利的。

for(auto&& x:my_vector)

循环变量是一个通用引用。这意味着它将是一个左值或右值引用,具体取决于取消引用容器的迭代器时返回的类型。据我所知,只有少数几个不起眼的案例,这是有用的。你可能永远都不需要它。