首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >explicit *这个对象参数在C++23中提供了什么?

explicit *这个对象参数在C++23中提供了什么?
EN

Stack Overflow用户
提问于 2021-10-18 00:46:45
回答 1查看 155关注 0票数 3

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

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

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

因为:

代码语言:javascript
复制
struct hello {
  void func() {}
};

可能等同于:

代码语言:javascript
复制
struct hello {
  void func(this hello) {}
};

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

例如,我有一个简单的函数:

代码语言:javascript
复制
struct hello {
  int data;
  void func(this hello self) {
    self.data = 22;
  }
};

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-18 00:55:47

本文的第4.2.3节提到,“按值this”是明确允许的,并且可以做您所期望的事情。5.4节给出了一些你想要这样做的例子。

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

代码语言:javascript
复制
void func(this hello& self) {
  self.data = 22;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69609675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档