![](/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.