首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么向小班成员返回const引用?

为什么向小班成员返回const引用?
EN

Stack Overflow用户
提问于 2018-05-02 14:35:09
回答 2查看 220关注 0票数 8

我觉得这个问题肯定是在某个地方,但要么我找不到合适的搜索词,要么它就被漏掉了。

假设我有这样保护成员的类.

代码语言:javascript
复制
class MyClass {
   int m_value;
public:
   MyClass(int v) : m_value(v) {}
   int value() const { return m_value; }
}

我看到了所有的示例代码,因此相反,返回一个对成员变量的const引用,如下所示.

代码语言:javascript
复制
class MyClass {
   int m_value;
public:
   MyClass(int v) : m_value(v) {}
   const int& value() const { return m_value; }
// ^^^^^^^^^^
}

我通常理解返回const的值,以及返回复合对象的引用的值,但是小于体系结构指针大小的对象的值是多少?它看起来既不那么有效,也不那么安全,没有任何我能想到的优势。

在我的示例中,我想可以对构造函数进行类似的讨论,但是这个问题在这里集中于返回的值。

This is the SO answer促使我问了这个问题。

EN

回答 2

Stack Overflow用户

发布于 2018-05-02 14:39:43

const &返回到int这样的类型可能是完全没有意义的,而且可能会降低性能。对于将const int&作为函数参数类型传递也可以这样说,但这更容易被接受,因为它确实克服了调用站点中不必要的类型转换。

这只是程序员自己养成的一个坏习惯。

票数 2
EN

Stack Overflow用户

发布于 2018-05-02 14:47:07

如果你只谈论int,那么是的,这可能是毫无意义的。但是,当您知道稍后可以更改返回或参数类型,并且使用别名时,放置const &可能会很有用,所以以后所要做的就是更改别名值,这个值可以超过8个字节。像这样

代码语言:javascript
复制
class MyClass {
   using TInnerType = int;
   TInnerType m_value;
public:
   MyClass(const TInnerType& v) : m_value(v) {}
   const TInnerType& value() const { return m_value; }
// ^^^^^^^^^^
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50137263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档