在 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 限定符規則?
uj5u.com熱心網友回復:
該論文的第 4.2.3 節提到this明確允許“按值”并執行您期望的操作。第 5.4 節給出了一些您希望何時執行此操作的示例。
所以在你的例子中,self引數被修改然后銷毀。呼叫者的hello物件永遠不會被修改。如果要修改呼叫者的物件,則需要self按參考獲取:
void func(this hello& self) {
self.data = 22;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321225.html
