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