簡體   English   中英

如果函數f()返回一個正確的指針:auto * v = f()OR 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;
}

autoauto*似乎都工作,似乎做同樣的事情。 這個假設是錯的嗎?

為什么兩者都給出相同的結果?

在這種情況下哪個是正確使用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.

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