![](/img/trans.png)
[英]Does std::string const& parameter copies the passed const char*?
[英]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);
你不知道X
和Y
实际上是什么类型,但你知道返回值与x * y
类型相同,可以用这种方式推导出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.