C++ ->;函数括号后的符号表示什么?

C++ ->;函数括号后的符号表示什么?,c++,c++11,C++,C++11,例如,在: virtual auto create_obj() -> std::unique_ptr<Base> { return std::unique_ptr<Base>{}; } 虚拟自动创建对象()->std::unique\u ptr { 返回std::unique_ptr{}; } ->意味着什么? 既然返回类型被指定为自动,为什么有必要呢?它被称为尾部返回类型,这只是指定函数返回类型的另一种方式 一种有用的情况是从函数返回函数指

例如,在:

  virtual auto create_obj() -> std::unique_ptr<Base>
  {
    return std::unique_ptr<Base>{};
  }
虚拟自动创建对象()->std::unique\u ptr
{
返回std::unique_ptr{};
}
->意味着什么? 既然返回类型被指定为自动,为什么有必要呢?

它被称为尾部返回类型,这只是指定函数返回类型的另一种方式

一种有用的情况是从函数返回函数指针。以下是“标准”语法:

这更容易阅读

另外,尾部返回类型也可用于函数指针声明:

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

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

auto too_far() -> auto(*)() -> void(*)(){ return yoyo_fn; }
auto yoyo(){std::cout void(*)({return yoyoyo;}
自动过远()->自动(*)(->void(*)({return yoyoyo_fn;}

这是非常做作的,但是比我必须用传统语法编写要容易得多!

这可以编译吗?@datahaki,当然可以!(给定一个C++11编译器)嗯,有时候帮助
auto
是件好事。在这种情况下,它什么也不做really@Bathsheba别开玩笑了……为什么它有用?但为什么要使用auto呢?可能还不如用通常的方式指定返回类型……似乎不需要输入。肯定还有更多吗?@John在你的例子中,这是毫无意义的,但我会的包括一个有用的例子。@John这只是一个偏好问题。我个人写
auto main()->int
,因为它会让人讨厌。@PatrickM'Bongo你喜欢打字吗?这是一种没有消失的遗留问题吗?@John,不,这是一个全新的东西。请看重复的问题/答案。
auto my_fn() -> void(*)(){
    return yoyo;
}
auto yoyo(){ std::cout << "yoyo!\n"; }

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

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