【问题标题】:What does '&' after class name mean?类名后的“&”是什么意思?
【发布时间】:2017-07-18 17:22:12
【问题描述】:
#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)

【问题讨论】:

标签: c++11


【解决方案1】:

类名后的“&”是什么意思?

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

两者有什么区别:

for(auto x:my_vector)

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

for(auto& x:my_vector)

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

for(auto&& x:my_vector)

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

【讨论】:

    猜你喜欢
    • 2020-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2016-01-03
    相关资源
    最近更新 更多