在c ++中使用引用

时间:2013-10-07 00:49:19

标签: c++ reference stack const

我试图围绕参考的使用。到目前为止,我已经理解引用需要是常量,它们就像变量的别名。但是在为堆栈编写代码时,我通过引用传递值来推送函数。我必须包含“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;
}

2 个答案:

答案 0 :(得分:2)

如果您使用

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

如果你删除“const”,你会看到它有效。这是因为12是常数,但X不是常数!

换句话说:

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

基本规则是:

  • 我的功能无需更改参数值:使用void push(const int &x);
  • 我的函数需要更改参数的值:使用void push(int &x); [请注意,如果您打算更改参数的值,当然它不能是常数12,而是一些变量价值12,这就是区别!]

答案 1 :(得分:0)

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