C++ 从const对象调用非const成员函数而不使用它,为什么会出错?

C++ 从const对象调用非const成员函数而不使用它,为什么会出错?,c++,gcc,C++,Gcc,在g++中运行以下代码将导致以下错误: 错误:将“const A”作为“this”参数传递将丢弃限定符[-fppermissive] 我们在哪里使用此 fpermissive表示代码不一致。 本标准在何处规定这是一个错误?本标准涵盖了本标准中的。具体参见示例2,其中(部分)说明: 调用y.g()的格式不正确,因为y是const和s​::​g()是一个非常量成员函数 应用于代码时,等效语句为: 调用a.f()的格式不正确,因为a是const和a​::f()是一个非常量成员函数 更清楚地说:A::f

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

错误:将“const A”作为“this”参数传递将丢弃限定符[-fppermissive]

我们在哪里使用此

fpermissive表示代码不一致。
本标准在何处规定这是一个错误?

本标准涵盖了本标准中的
。具体参见示例2,其中(部分)说明:

调用
y.g()
的格式不正确,因为
y
const
s​::​g()是一个非常量成员函数

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

调用
a.f()
的格式不正确,因为
a
const
a​::f()是一个非常量成员函数

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


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

每次调用类方法时都使用
this
。如果需要解决方案,请将
f
限定为
const
->
void f()const{}
struct A{
    void f(){};
};

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