簡體   English   中英

該指針在lambda-capture中通過引用

[英]this pointer in lambda-capture by reference

struct CL
{
    int i;
    void fnc()
    {
        [&this](){i=1;};  // (1) error
        [&](){i=1;};      // (2) ok
    }
};

這是第一種情況,不起作用,但是第二種情況。 這是為什么?
我看到標准5.1.2 / 1:

捕獲:
識別碼
和標識符
這個

(即&this不存在)

和5.1.2 / 15:

如果實體是隱式或顯式捕獲的,但不是通過副本捕獲的,則通過引用捕獲該實體

在第二種情況下,根據5.1.2 / 14,“ this”未被復制捕獲:

如果一個實體是隱式捕獲的,並且捕獲默認值為=,或者使用不包含&的捕獲顯式捕獲, 則通過副本捕獲該實體

但是,如何才能通過值顯式捕獲“ this”指針呢? 還是只能使用default-capture &隱式地進行?

形式上, [&]確實抓住this參照,每5.1.2 / 16“的實體通過引用捕獲 ,如果它隱含或明確地捕獲但不通過復制捕獲。” 但這沒關系,因為

5.1.2 / 18 ...如果this被捕獲,每個ODR使用的this被轉換成到閉合型,流延(5.4)到的類型的相應的未命名數據成員的訪問this [注意:強制類型轉換確保轉換后的表達式是prvalue。 —尾注]

因此,對於this ,捕獲通過復制和捕獲通過引用是無法區分的。 對於所有的實際目的, this總是被復制抓獲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM