我正在为数组创建一个类作为堆栈,并遇到两种类型的函数来返回顶部元素。我无法理解两者之间的区别以及编译器如何决定调用哪一个。下面是两个代码。
T & getTop() { //function 1
return arr[top - 1];
}
const T & getTop() const { //function 2
return arr[top - 1];
' top'变量指向数组中的当前空单元格,T是通用数据类型。
提前感谢您的帮助。
答案 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,具体来说: