![](/img/trans.png)
[英]What's the difference between “auto v = f()” and “auto&& v = f()”?
[英]If function f() returns a pointer, which is correct: auto* v = f() OR auto v = f()?
我幾乎到處都使用c ++ 11 auto
關鍵字。 我不確定在這種情況下我是否正確使用它。 請考慮以下簡單示例:( http://ideone.com/TxLJlx )
#include <iostream>
const char* f()
{
return "Hello";
}
int main()
{
auto s1 = f();
auto* s2 = f();
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
return 0;
}
auto
和auto*
似乎都工作,似乎做同樣的事情。 這個假設是錯的嗎?
為什么兩者都給出相同的結果?
在這種情況下哪個是正確使用auto
?
它們的含義相同 - 兩種情況下的類型都是const char*
。 但是,使用auto *
stress(和自我文檔) f()
返回指針的事實。 如果稍后更改函數以返回其他內容(例如,在這種情況下為std::string
),則會發出錯誤信號。
使用哪個主要是風格問題。 如果代碼在很大程度上依賴於f()
返回一個指針,或者您覺得需要明確這一點,請使用auto*
。 否則,只需使用auto
並完成它。
請注意,返回引用時的情況不同。 這些都是通過auto
扣除來刪除的,因此如果您需要將返回的引用作為參考,則必須使用auto &
(或使用auto &&
來獲取通用引用)。
auto s1 = f();
您可以使用auto
以便編譯器可以隨時推斷出適當的類型,而不必為此而煩惱。 它是否是一個指針是照顧,因為它是該類型的一部分,所以你不必擔心這一點。
auto
為你完成任何類型的操作,如果指定了指針( *
),其左邊的所有內容都是char
(或者如果沒有完成可用會導致錯誤,例如,如果f()
返回一個普通的char
)。
你應該打擾指針,只需使用auto
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.