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

时间:2016-12-18 04:53:43

标签: c++ reference polymorphism const return-type

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

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

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

提前感谢您的帮助。

3 个答案:

答案 0 :(得分: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版本。

答案 1 :(得分:0)

你可以看到这个answer作为参考,但是对于这个具体的案例来说,就像告诉别人一样,方法不会改变对象的逻辑状态。

答案 2 :(得分:0)

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

需要两个实现来允许从包含数组的实例const的上下文中获取top元素,同时允许修改不是{{1}的上下文中的top元素}}

这是名为 const correctness 的更大概念的一部分,您可以获得有关它的其他信息here,具体来说:

相关问题