在C++23中,deducing this最终被添加到标准中。
根据我从提案中读到的内容,它开辟了一种创建mixins的新方法,并有可能创建递归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;
}
};更改hello类型的值时,this参数不需要是引用吗?还是基本上跟以前一样遵循成员函数的cv-ref限定符规则?
发布于 2021-10-18 00:55:47
本文的第4.2.3节提到,“按值this”是明确允许的,并且可以做您所期望的事情。5.4节给出了一些你想要这样做的例子。
因此,在您的示例中,self参数被修改,然后被销毁。调用方的hello对象永远不会修改。如果你想修改调用者的对象,你需要引用self:
void func(this hello& self) {
self.data = 22;
}https://stackoverflow.com/questions/69609675
复制相似问题