繁体   English   中英

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

[英]Meaning of “const -> std::string const&” after the function definition?

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

是什么

const -> std::string const& 

这个意思是什么意思?

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

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

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

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

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

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

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

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

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

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

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

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

你不知道XY实际上是什么类型,但你知道返回值与x * y类型相同,可以用这种方式推导出来。

const是成员函数的常用类型的cv限定符*thisconst内部的const

-> std::string const& pairs with auto形成尾随返回类型 (参见(2))。 区别仅在于语法 - 以下语法是等效的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM