簡體   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