通过引用返回的函数和返回 const 值的 const 函数之间的区别[重复]

问题描述 投票:0回答:3

我正在为数组创建一个类以用作堆栈,并遇到两种类型的函数来返回顶部元素。我无法理解两者之间的区别以及编译器如何决定调用两者中的哪一个。下面是两者的代码。

T & getTop() {                //function 1
    return arr[top - 1];
}
const T & getTop() const {   //function 2
    return arr[top - 1];

“top”变量指向数组中当前的空单元格,T 是通用数据类型。

感谢您提前提供的帮助。

c++ reference polymorphism constants return-type
3个回答
1
投票

我想你的堆栈叫做

stack

stack<T> s;
/*do something with it*/
s.getTop(); //will call the non const version
std::as_const(s).getTop() //will call const version

同样:

const stack<T> s;
s.getTop() //const version

所以,如果变量的类型不是 const,它将调用非 const 版本。否则它将调用 const 版本。


0
投票

您可以看到这个answer以供参考,但简单来说,对于这种特定情况,看起来是为了告诉其他方法不会改变对象的逻辑状态。


0
投票

const T&
引用不允许修改引用的数据。请注意,第二个
getTop()
方法也声明为
const
,以指定该方法不会修改调用该方法的实例的状态。

需要两个实现才能允许从包含数组的实例为

const
的上下文中获取顶部元素,同时允许在不是
const
的上下文中修改顶部元素。

这是名为“常量正确性”的更大概念的一部分,您可以在此处获取有关它的更多信息,具体来说:

    “const X& x”是什么意思?
  • 什么是“const 成员函数”?
  • 引用返回和const成员函数之间有什么关系?
© www.soinside.com 2019 - 2024. All rights reserved.