ตัวอย่างที่ฉันพบว่าการจับภาพthis
ในแลมบ์ดาใช้อย่างชัดเจน เช่น:
capturecomplete = [this](){this->calstage1done();};
แต่ดูเหมือนว่ามันเป็นไปได้ที่จะใช้มันโดยปริยาย เช่น:
capturecomplete = [this](){calstage1done();};
ฉันทดสอบสิ่งนี้ใน g ++ และรวบรวมมัน
C ++ มาตรฐานนี้หรือไม่ (และถ้าเป็นเช่นนั้นเวอร์ชันใด) หรือเป็นรูปแบบของส่วนขยายบางส่วน
ฉันสามารถมองเห็นสิ่งนี้ได้ แต่ในเวลาเดียวกันดูเหมือนว่าจะเป็นเรื่องที่น่ากลัวสำหรับสิ่งที่ควรเป็นงานง่าย ๆ
—
plugwash
ฉันจำ MSVC (อาจจะแค่ปี 2015) ยังมีปัญหาเกี่ยวกับการจับภาพ
—
Flamefire
this
และการใช้งานในแลมบ์ดาซึ่งอาจเป็นเหตุผลที่จะใช้อย่างชัดเจน
@plugwash: นักพัฒนามักจะขี้เกียจและต้องการลดสิ่งต่าง ๆ และนักออกแบบภาษาก็ไม่แตกต่างกัน อย่างไรก็ตามการใช้คำฟุ่มเฟื่อยมักจะต้องแก้ไขความคลุมเครือและเป็นกรณีที่นี่
—
Flater
this->
อย่างชัดเจนซึ่งก็เพื่อให้แน่ใจว่ามีการใช้ค่าที่บันทึกไว้อย่างชัดเจน โปรดทราบว่า[](){ calstage1done(); }
จะไม่ถูกกฎหมายเพราะthis
จะไม่ถูกจับกุม แต่เมื่อจับภาพthis
อย่างชัดเจนก็น่าแปลกใจสำหรับร่างกายของฟังก์ชั่นที่จะปรากฏ[this](){ calstage1done(); }
ได้อย่างรวดเร็วไม่จริงใช้ค่าที่บันทึก: