当前位置: 首页 > 知识库问答 >
问题:

从const对象调用非const成员函数而不使用this,为什么是错误?

咸亦
2023-03-14

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

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

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

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

我们在哪里使用this

F允许意味着代码不一致。标准在哪里规定这是一个错误?

共有1个答案

柴衡
2023-03-14

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

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

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

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

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

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

 类似资料:
  • 我们一直强调,最低权限原则(principle of least privilege)是良好软件工程的最基本原则之一。下面介绍这个原则如何应用于对象。 有些对象需要修改,有些不需要。程序员可以用关键字const指定对象不能修改,且修改时会产生语法错误。例如: const Time noon(12,0,0); 声明 Time 类对象 noon 为 const,并将其初始化为中午12时。 软件工程视点

  • 我遇到了我不明白的情况。有人能很好地解释为什么第一个代码编译正确,而第二个代码出错: 错误:“TestClass::z”的值在常量表达式中不可用。} - ^ 注意:“int TestClass::z”不是const static int z;" 工作代码: 但是当我尝试使 静态时,我得到上述错误: 附言:我正在使用mingw32-g 4.8.1

  • 问题内容: 以下是使用React useState Hook的标准方法: 但是,显然要将此变量重新分配给其他原始值。 为什么变量没有定义为? 问题答案: 显然将被重新分配给其他原始值 并不是的。重新呈现组件后,将再次执行该函数,从而创建新的作用域,创建新的变量,该变量与先前的变量无关。 例: 注意: 挂钩更为复杂,实际上并未像这样实现。这只是为了演示类似的行为。

  • 请帮帮我 致命错误:在第104行的/home/u357965800/public_html/include/class.admin.php中对非对象调用成员函数prepare()

  • 当我尝试运行以下代码,clang(6.0)和g(8)与-std=c 17给我一个static_assert错误: 八国集团 /usr/bin/.../lib/gcc/x86_64-linux-gnu/8/.../.../.../.../包括/c /8/bits/stl_tree.h: 457:7:错误:static_assert失败,由于要求'is_invocable_v'"比较对象必须作为con

  • 这是我代码的一部分 我得到一个错误致命错误:对$stmt行上的非对象调用成员函数bind_param()-