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