2016-09-27 44 views
1

例如,在:函數括號之後的 - >符號表示什麼?

virtual auto create_obj() -> std::unique_ptr<Base> 
    { 
    return std::unique_ptr<Base>{}; 
    } 

是什麼 - >意味着什麼? 由於返回類型被指定爲auto,爲什麼它是必需的?

+0

這是否編譯? – datahaki

+1

@datahaki,當然它! (給出一個C++ 11編譯器) –

+1

那麼,有時候給自動助手一個好處。 – Bathsheba

回答

3

它被稱爲追尾返回類型,它只是另一種指定函數返回類型的方法。

有用的一種情況是從函數返回函數指針。這裏是 「標準」 語法:

void yoyo(){ 
    std::cout << "yoyo!\n"; 
} 

void(*my_fn())(){ 
    return yoyo; 
} 

對戰更 「現代」 的語法:

auto my_fn() -> void(*)(){ 
    return yoyo; 
} 

哪個更容易閱讀。

P.S.尾隨返回類型可用於函數指針的聲明太:

auto yoyo(){ std::cout << "yoyo!\n"; } 

auto yoyo_fn() -> void(*)(){ return yoyo; } 

auto too_far() -> auto(*)() -> void(*)(){ return yoyo_fn; } 

這是非常做作,但比我要是在傳統的語法來寫更容易閱讀!

+0

但是爲什麼使用auto呢?也可以用通常的方式指定返回類型......就好像是不必要的輸入。當然,還有更多呢? –

+0

@John在你的例子中是沒有意義的,但我會在其中加入一個有用的例子。 – CoffeeandCode

+2

@John這只是一個偏好問題。我親自編寫'auto main() - > int',因爲它會讓人煩惱。 –

相關問題