从const对象调用非const成员函数而不使用此函数,为什么会出现错误

Calling non-const member function from const object without using this, why is it an error?

本文关键字:函数 const 为什么 错误 调用 对象 成员      更新时间:2024-09-27

在g++中运行以下代码将导致以下错误:

错误:将"const A"作为"this"参数传递会丢弃限定符[-fpermission]

struct A{
void f(){};
};
int main(){
const A a;
a.f();
return 0;
}

我们在哪里使用this

fpermission表示代码不一致。标准在哪里规定这是一个错误?

该标准涵盖了[class.this]中的this。特别是,请参见示例2,其中(部分(表示:

调用y.g()格式错误,因为yconst,而s​::​g()是一个非常数成员函数。

应用于代码时,等效语句为:

调用a.f()格式错误,因为aconst,而A​::f()是一个非常数成员函数。

更清楚地说:A::f()是非常数,因为它缺少const限定;f()是否将是合法常量函数(如果添加了const限定(并不相关。

不过,也许你真正感兴趣的是[class.this]的第一部分,它指出关键字this在每个非静态成员函数中都有意义,无论该函数中是否使用过this