【问题标题】:What does explicit *this object parameter offer in C++23?显式 *this 对象参数在 C++23 中提供了什么?
【发布时间】:2021-12-05 03:09:10
【问题描述】:

在 C++23 中,deducing this 最终被添加到标准中。

根据我从提案中读到的内容,它开辟了一种创建 mixin 的新方法,并且可以创建递归 lambda。

但是我很困惑,如果这个参数创建一个“副本”而不使用模板,因为没有引用,或者显式 this 参数是否有自己的值类别规则?

自:

struct hello {
  void func() {}
};

可能相当于:

struct hello {
  void func(this hello) {}
};

但它们的类型不同,因为对于&hello::func,第一个给出void(hello::*)(),而第二个给出void(*)(hello)

例如,我有这个简单的功能:

struct hello {
  int data;
  void func(this hello self) {
    self.data = 22;
  }
};

this参数不是需要引用才能改变hello类型的值吗?还是和以前一样基本遵循成员函数的 cv-ref 限定符规则?

【问题讨论】:

  • 提案中有一个“动机”部分。

标签: c++ this c++23


【解决方案1】:

论文的第 4.2.3 节提到“按值 this”是明确允许的,并且可以满足您的期望。第 5.4 节提供了一些示例,说明您何时希望这样做。

因此,在您的示例中,self 参数被修改然后销毁。调用者的hello 对象永远不会被修改。如果要修改调用者的对象,需要引用self

void func(this hello& self) {
  self.data = 22;
}

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2021-11-04
    • 2021-12-01
    相关资源
    最近更新 更多