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

隐式对象参数C

邢灿
2023-03-14

在此链接中:隐式对象参数

在此引用:

如果任何候选函数是没有显式对象参数(自C 23以来)但没有构造函数的成员函数(静态或非静态),则将其视为具有额外参数(隐式对象参数),该参数表示调用它们的对象,并显示在第一个实际参数之前。

我不明白为什么这里提到静态这个词?隐式对象参数不是(this)指针吗((this)指针)只适用于非静态函数)?

在此链接中编辑:链接

报价:

关键字this是一个右值(直到C 11)prvalue(自C 11)表达式,其值是隐式对象参数(调用非静态成员函数的对象)的地址。它可以出现在以下上下文中:

共有2个答案

糜凯泽
2023-03-14

首先,隐式对象参数和this指针之间有区别。前者是引用类型,后者是关键字,是指针类型的右值。例如,对于const限定的非静态成员函数,隐式对象参数的类型为const X

隐式对象参数不是(this)指针吗(this)指针只适用于非静态函数)

不,静态和非静态成员函数都有一个隐式对象参数,用于重载解析,从上面可以看出。火柴funcs#2规定:

候选函数集可以包含要根据同一参数列表解析的成员函数和非成员函数。为了使参数和参数列表在这个异构集合中具有可比性,成员函数被视为具有一个额外的参数,称为隐式对象参数,它表示已为其调用成员函数的对象。出于重载解析的目的,静态和非静态成员函数都有一个隐式对象参数,但构造函数没有。

(强调地雷)

戴树
2023-03-14

考虑一下,如果没有此规则,并且静态方法和非静态方法具有相同的(显式)参数,会发生什么情况。然后,将向非静态方法添加一个额外的隐式参数(this),但不会向静态方法添加。这将使两种方法的参数列表不同,并允许使用相同显式参数的非静态方法重载静态方法。

 类似资料:
  • 关于非静态成员函数,请参见 常量、volatile和ref限定成员函数 其中提到: 非静态成员函数可以不使用ref限定符,也可以使用左值ref限定符(标记 no ref-限定符:隐式对象参数具有引用cv限定X的左值类型,并且还允许绑定右值隐式对象参数 左值引用限定符:隐式对象参数具有引用cv限定X的左值类型 rvalue ref限定符:隐式对象参数的类型rvalue reference指向cv限定

  • JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。 JSP所支持的九大隐式对象: 对象 描述 request HttpServletRequest 接口的实例 response HttpServletResponse 接口的实例 out JspWriter类的实例,用于把结果输出至网页上 session HttpSess

  • 一、隐式转换 1.1 使用隐式转换 隐式转换指的是以 implicit 关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能。示例如下: // 普通人 class Person(val name: String) // 雷神 class Thor(val name: String) { // 正常情况下只有雷神才能举起雷神之锤 def hamm

  • 可以通过 RpcContext 上的 setAttachment 和 getAttachment 在服务消费方和提供方之间进行参数的隐式传递。 1 在服务消费方端设置隐式参数 setAttachment 设置的 KV 对,在完成下面一次远程调用会被清空,即多次远程调用要多次设置。 RpcContext.getContext().setAttachment("index", "1"); // 隐式传

  • 这是我的代码的一部分,工作不正常,我试图设置键,使桨向上和向下移动,但我无法找出我的代码有什么问题。 错误是: 参数必须是rect样式对象

  • 我正在用一个简单的游戏尝试python,但是遇到了这个错误 代码如下所示: 然后错误显示: 文件“my_code/alien_invision/bullet.py”,第15行,在init self中。rect=pygame。Rect(左=0,上=0,宽=self.settings.bullet\u width, 类型错误:参数必须是Rect样式的对象 如果我按以下方式更改该行,它将正常工作: 我不