【发布时间】:2015-05-13 07:39:39
【问题描述】:
class A
{
public:
A(){};
~A(){};
void method(){};
};
void call(const A &a)
{
a.method(); // I cannot call this method here if I use "const" but I can call it if not using "const"
}
int main()
{
A a;
call(a);
return 0;
}
在这种情况下,错误是:“passing const A as this argument of void A::method() discards qualifiers [-fpermissive]|”
在函数call 中,如果我使用const,我会得到错误,但如果我摆脱它,它会起作用。
谁能帮我解释一下?
【问题讨论】:
-
见What is a “const member function”?。另外,在成员函数定义之后不需要
;。 -
你认为
const有什么作用? -
@JonathanWakely 感谢您的回答,但此规则不适用于此链接中提到的重载运算符 [],您能为我解释更多吗? pastebin.com/1mKek7pM 很抱歉给您带来不便。我其实不知道如何在这个评论区创建代码块。
-
@LightnessRacesinOrbit 据我所知,它确保我们无法更改对象的任何内容。我尝试了规则“void method() const {};”用于重载运算符 [] 但我不起作用。你能给我解释一下吗?这是代码:pastebin.com/1mKek7pM
-
@MrCold:代码不起作用的唯一原因是您在随机添加的
operator[]中有一个错误,与此问题无关。当你试图解决问题时,试着一次只改变一件事。如果您仅将const添加到method(),您会发现它工作正常。
标签: c++ function class methods constants