函数定义后"const - > std :: string const&"的含义是什么?

Jia*_*ang 14 c++ c++14

C++ Primer,第5版中阅读一个练习的答案,我找到了这段代码:

#ifndef CP5_ex7_04_h
#define CP5_ex7_04_h
#include <string>

class Person {
std::string name;
std::string address;
public:

auto get_name() const -> std::string const& { return name; }
auto get_addr() const -> std::string const& { return address; }
};

#endif
Run Code Online (Sandbox Code Playgroud)

是什么

const -> std::string const& 
Run Code Online (Sandbox Code Playgroud)

这个意思是什么意思?

Bat*_*eba 21

auto get_name() const -> std::string const& { return name; }是等效的尾随返回类型表示法

std::string const& get_name() const { return name; }

请注意,在使用一种语法声明函数并使用另一种语法定义函数的意义上,等价是精确的.

(这是C++标准的一部分,包括C++ 11).

  • @MarkRansom:C++ 11.每当你编写一个lambda时你都会使用它(虽然你可能在很多时候都会在实践中省略尾随返回类型).你还会看到monstrosity是`auto main() - > int {}`无论Alf在哪里写一个C++答案;) (12认同)
  • @LightnessRacesinOrbit我知道,但1)老实说,直到你告诉我,我才知道,2)我不喜欢编辑其他人的答案,这似乎有点粗鲁.PS 3)让人们考虑留下更好的答案总是好的. (3认同)
  • @user:不,C++ 03语法已经允许`std :: string const&get_name()const;`新语法的目的是在处理返回类型时在词法范围内有更多名称,这很方便使用`decltype`. (2认同)
  • @Destructor:在C++ 11中,[函数不存在功能](http://coliru.stacked-crooked.com/a/1c26fe845cc95923).在C++ 14中,[它似乎不想与`main`一起使用](http://coliru.stacked-crooked.com/a/354a1c63ec37a406),而且我不是我的头脑确定为什么会这样(我很想说它实际上是一个编译器错误,但无论是全新的铿锵声还是全新的GCC都不满意; [我已经向SO寻求建议](http://stackoverflow.com/q /五十六万零六百四十八分之三千九百十万六千七百九十八)).显然,如果你像一个好孩子一样省略了"返回0",那么无论如何都会毫无意义;) (2认同)

R S*_*ahu 9

该部分-> std::string const&是尾随返回类型,是自C++ 11以来的新语法.

第一个const说它是一个const成员函数.可以在const类型的对象上安全地调用它Person.

第二部分只是告诉返回类型是什么 - std:string const&.

当需要从模板参数推导出返回类型时,它很有用.对于已知的返回类型,它不比使用更有用:

std::string const& get_name() const { return name; }
Run Code Online (Sandbox Code Playgroud)