3

在 C++23 中,推导这一点最终被添加到标准中。

根据我从提案中读到的内容,它开辟了一种创建 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 限定符规则?

4

1 回答 1

5

该论文的第 4.2.3 节提到“按值this”是明确允许的,并且可以满足您的期望。第 5.4 节给出了一些你想在什么时候这样做的例子。

所以在你的例子中,self参数被修改然后被销毁。调用者的hello对象永远不会被修改。如果要修改调用者的对象,需要self引用:

void func(this hello& self) {
  self.data = 22;
}
于 2021-10-18T00:55:47.427 回答