1樓:Jude Gao
問:既然如此為什麼在範圍迴圈語句中要用引用呢?其意義是什麼?
答:用range-for遍歷的時候,你遍歷的是元素的拷貝。每次拷貝都需要呼叫該元素型別的copy constructor。
由於通常的use case中,我們不會對遍歷的元素進行更改,也就意味著copy-by-value的特性在浪費時間。往往,我們可以加&直接遍歷元素本身,而非拷貝。
問:引用是物件的乙個別名,每個引用會繫結乙個物件(非常量)既然我可以直接用本名,為什麼還要搞多一步用別名,後者不是一種間接使用?不會更低效嗎?
2樓:遛個彎兒
首先要肯定一下參考的例子是沒有問題的!這種情況下引用的效率也會更高,只是效果不明顯。
你執行結果的效果相同,只是顯示的效果一樣,但是程式執行的過程卻有很大的差別。
for(
autoc:
test_string
)cout
< ;// 每次迴圈程式的處理過程簡化 1.構造變數 charc2. 給變數c賦值 3.輸出變數c4. 析構變數 cfor (auto&c :test_string )cout < ;// 每次迴圈程式的處理過程簡化 1.給引用 c分配空間 ,儲存引用的位置。 2.輸出變數 c可以看到,在引用的例子中,變數c是不需要構造乙個臨時變數型別的。如果test_string是乙個復合型別,例如:vector test_string; class myString 那麼每一次迴圈都要重新構造和析構一次myString,這時候使用引用&就可以避免無意義的構造和析構了。 3樓:netcan 你說的對一半,對於 string 這種資料結構來說,其由基本資料結構char組成,對於基礎資料結構來說,for應該用值而非引用,避免間接取址。 也就是說 for (auto c : test_string) cout << c << endl; 比引用要有效。 那什麼時候用引用呢?就是非基礎資料結構的時候,例如大型結構體 sizeof(STRUCT) > sizeof(size_t),那時候用引用比值有效,避免拷貝,拷貝是有開銷的。 在不改變元素的情況下,最終效果是一樣的,只不過哪種寫法更高效罷了;否則通過引用來改寫元素而不是拷貝。 4樓:逾幻月日 你這只實現單獨輸出當然是一樣的,並且不用引用完全可以。 但是問題在於,你看一下上下文,可能還會講到改變變數的值所以如果要改變變數值的時候,如果不用這個引用,那麼就會變成後面的資料元素中的乙份副本,從而不能改變實際的值了。 所以從普適性減少錯誤的角度來說,都用一下引用比較好,畢竟對於效能的開銷微乎其微,乙個O(1)的語句幾乎沒有影響 小跑的人 在MYSQL中使用GROUP BY對錶中的資料進行分組時,GROUP BY X意思是將所有具有相同X字段值的記錄放到乙個分組裡,GROUP BY X,Y意思是將所有具有相同X字段值和Y字段值的記錄放到乙個分組裡。X,Y的排列組合 chengzhang GROUP BY 語句根據乙個或多個欄... 小島上的做題家 你的程式UML畫下來應該是一棵樹或者幾棵樹。構建時是從下往上構建,釋放時從上往下釋放。乙個object儲存的reference,其值一定要在這個架構中比這個object靠下,才是安全的,因為它的life time比你這個object長。本質上,你只要定義明白這個ref比它的使用者活得... 因為兩者不是一回事。拿 memcpy void dst,void const src,size t n 舉例,在乙個 I16P32 的機器上,處理器明明理論上最多可以複製 位元組,但如果引數 n 用 unsigned int 的話最大就只能複製 個位元組了。各個平台資料表示方式的記法 其中 I 指 ...sql語句中啥什麼要用到group by?group by什麼根據什麼分組的?
為什麼c 裡返回引用是危險的,但msdn還是寫了這樣的用法?
stl裡為什麼要用size type,而不直接用unsigned int 他們兩者其實是一回事吧