2017-07-18 105 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) 

循環變量是一個通用的引用。這意味着,這將是或者是左值或右值引用,取決於類型時所述容器的迭代器取消引用返回。據我所知,只有少數不明顯的情況是有用的。你可能永遠不需要它。