2017-07-18 108 views
0
#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) 
+0

这就是所谓的“参考”。 –

+1

的可能的复制[C++拷贝构造的语法:是符号参考R/L值?](https://stackoverflow.com/questions/33290801/c-copy-constructor-syntax-is-ampersand-reference-to-rl - 值) –

+0

不包括<比特/ STDC++。H>,它是一个非标准报头,并不意味着列入。 – 2017-07-18 19:14:56

回答

1

什么是 '&' 后的类名是什么意思?

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

什么是差异性之探源:循环变量

for(auto x:my_vector) 

是非参考。它将包含容器中的对象的副本。

for(auto& x:my_vector) 

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

for(auto&& x:my_vector) 

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