簡體   English   中英

我們是否應該始終使用auto &&作為局部變量

[英]Should we always use auto&& for local variable

在讀取此線程auto&& ,是否意味着當我們聲明一個局部變量來捕獲函數的返回類型(以准確保留函數返回的類型)時,我們應該總是使用auto&&而不是auto

例如,用例可以是

auto&& result = func_returning_lvalue_or_lvalue_reference();

要么

auto&& iterator = vector_.begin();

或其他任何東西。

換句話說,擁有大量auto&&的基本代碼是正常的嗎?

不,你不應該一直使用auto&& 特別是,如果您需要副本,則不應使用它。 使用auto&&您可能會獲得一個副本(作為對臨時對象的引用),或者您可能只獲得對原始對象的引用。

例如:

auto&& name = customer.get_name(); // std::string or const std::string&
name.erase(name.find(' '));

這段代碼編譯了嗎? 如果它編譯,它是否會更改客戶的名稱,還是只對臨時對象起作用? 如果不查看函數get_name()的簽名,你無法分辨。

不,它有時會導致不確定的行為。

void f()
{
    string a{"a"};
    string b{"b"};
    auto&& c = move(a+b);
    ...
}

c將比a + b產生的臨時壽命更長。 還有其他方法可以解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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