【问题标题】:Why is Stack::top() a const member function?为什么 Stack::top() 是 const 成员函数?
【发布时间】:2011-11-16 14:20:40
【问题描述】:
template <typename T> 
class Stack { 
  private: 
    std::vector<T> elems;  // elements 

  public: 
    Stack();               // constructor 
    void push(T const&);   // push element 
    void pop();            // pop element 
    T top() const;         // return top element 
}; 

为什么 top() 是一个常量函数?我认为每个堆栈都应该有它自己的顶部元素,因此要访问它是一个非常量的 top() 函数。我错了吗?

【问题讨论】:

  • 题名与本题有什么关系?
  • 它被之前的问题卡住了,我没有注意到要更改它。我现在就改。
  • Constant Member Functions 的可能重复项

标签: c++


【解决方案1】:

const != staticconst 表示该函数不会修改任何内部变量和对象的状态。

【讨论】:

    【解决方案2】:

    const 函数并不意味着结果不依赖于类对象。就是说调用函数不会修改对象。

    int main() {
        Stack<int> a_stack;
        a_stack.push(5); // modifies a_stack
        int n = a_stack.top(); // does not modify a_stack
    }
    

    不需要类对象的成员函数使用static 关键字声明(并且不能是const,因为没有承诺不修改的对象)。

    【讨论】:

      【解决方案3】:

      您正在声明一个不修改类属性的方法;保持堆栈不变

      【讨论】:

        【解决方案4】:

        因为它不会改变任何成员变量。

        【讨论】:

          【解决方案5】:

          查看只有栈顶设置为 const 的过程不需要内部更改。

          【讨论】:

            猜你喜欢
            • 2021-11-17
            • 2010-09-11
            • 2017-03-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多