【问题标题】:Calling non-const member function from const object without using this, why is it an error?从 const 对象调用非常量成员函数而不使用 this,为什么会出错?
【发布时间】:2020-11-12 02:53:30
【问题描述】:

在g++中运行下面的代码会出现如下错误:

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

struct A{
    void f(){};
};

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

我们在哪里使用this

fpermissive 意味着代码不符合要求。 标准在哪里声明这是一个错误?

【问题讨论】:

  • 每次调用类方法时都使用this
  • 如果您想要一个解决方案,请将f 限定为const -> void f() const {}

标签: c++ gcc


【解决方案1】:

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

调用 y.g() 格式错误,因为 yconsts​::​g() 是非常量成员函数。

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

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

更清楚一点:A::f() 是非常量的,因为它缺少 const 限定条件; f() 是否是合法的 const 函数(如果添加了 const 限定)无关紧要。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多