2016-09-27 45 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',因为它会让人烦恼。 –

相关问题