“const - > std :: string const&”的含义功能定义之后?

时间:2016-08-23 15:03:09

标签: c++ c++14

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

#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

什么是

const -> std::string const& 

在这种情况下意味着什么?

4 个答案:

答案 0 :(得分:21)

auto get_name() const -> std::string const& { return name; }是等效

尾随返回类型表示法

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

请注意,等效是 exact ,因为您可以使用一种语法声明一个函数,并使用另一种定义。< / p>

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

答案 1 :(得分:9)

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

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

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

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

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

答案 2 :(得分:4)

当你看到一个真正重要的例子时,这一切都更有意义;如问题所述,它只是一种声明返回类型的替代方法。

如果您有一个模板功能,您无法提前知道返回类型,这实际上可以提供帮助。例如:

template <class X, class Y> auto DoSomeThing(X x, Y y) -> decltype(x * y);

您不知道XY实际上是什么类型,但您知道返回值与x * y具有相同的类型,可以通过这种方式推断出来。

答案 3 :(得分:3)

const是成员函数的常用cv-qualifier*this在函数内是const

-> std::string const&auto成对,形成trailing return type(见(2))。区别仅在于语法 - 以下语法是等效的:

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