簡體   English   中英

如何在C ++中使用const和const?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM