[英]How to use auto with const and & in C++?
我有一個返回const A&的方法。
如果我想使用auto,那么正確的方法是什么。 這個可以嗎?
const auto &items = someObject.someMethod();
我看到有些人這樣做:
auto &items = someObject.someMethod();
我不確定使用哪一個,真的有什么區別......
編輯:
在這種情況下,這兩個是等價的嗎?
auto items = someObject.someMethod();
auto &items = someObject.someMethod();
即使這兩種形式在這種情況下是等價的,我仍然會選擇第一種形式,因為它更好地傳達了這樣一個事實:你的代碼片段不需要修改someMethod()
返回的對象的狀態。
所以我的建議就是這樣做:
const auto &items = someObject.someMethod();
在你的情況下,沒有區別。 在兩種情況下, auto
表示的類型將推導為const A
,因此items
的類型將為const A&
。
代碼的“自我記錄的語義”有所不同。 const auto &
明確指出“我想要引用返回的內容,我不會修改它。” 只是auto &
簡單地說“我想要一個對返回內容的引用”。
更明確的通常是更好的,例外是關注點的分離。 不應在接口的客戶端提及實現細節。
如果接收器不應該關心如何接收對象,那么完美的轉發是可行的方法。
auto && items = someObject.someMethod();
允許在auto
中推導const
,例如,將臨時值綁定到auto &
這對我來說是一個主要的代碼味道。
auto const &
應該是只讀的 auto &
應該是讀寫 auto &&
應該意味着捕獲所有,也許采用按值返回的對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.