1

我正试图围绕参考文献的使用。到目前为止,我已经明白引用需要是常量,它们就像变量的别名。但是,在为堆栈编写代码时,当我通过引用 push 函数传递值时。我必须包含“const”关键字。我需要知道为什么这是必要的。

简而言之,为什么这有效

class stack
{
public:
    void push(const int &x);
};

void stack::push(const int &x)
{
    // some code for push
}

 int main()
 {
    stack y;
    y.push(12);
    return 0;
 }

但这不是吗?

class stack
{
public:
    void push(int &x);
};

 void stack::push(int &x)
 {
     // some code for push
 }

int main()
{
    stack y;
    y.push(12);
    return 0;
}
4

2 回答 2

2

如果你使用

int main()
{
    stack y;
    int X = 12;
    y.push(X);
    return 0;
}

即使您删除“const”,您也会看到它有效。这是因为 12 是常数,但 X 不是常数!

换句话说:

  • 如果您使用void push(const int &x);--- 您可以使用 const 或非 const 值!
  • 如果您使用void push(int &x);--- 您只能使用非常量值!

基本规则是:

  • 我的函数不需要更改参数的值:使用void push(const int &x);
  • 我的函数需要改变参数的值:使用void push(int &x);[注意这里如果你打算改变你的参数的值,当然不能是常数12,而是一些值为12的变量,这就是区别!]
于 2013-10-07T00:56:03.987 回答
0

您使用右值(文字 12)调用 push 方法。在 C++ 中,可以仅使用 const 引用参数调用右值,或者在 C++11 中使用所谓的右值引用 (&&)。

于 2013-10-07T00:56:05.477 回答