Các ví dụ tôi đã thấy rằng việc chụp this
trong lambda sử dụng nó một cách rõ ràng; ví dụ:
capturecomplete = [this](){this->calstage1done();};
Nhưng có vẻ như cũng có thể sử dụng nó một cách ngầm định; ví dụ:
capturecomplete = [this](){calstage1done();};
Tôi đã thử nghiệm điều này trong g ++, và nó được biên dịch.
Đây có phải là C ++ chuẩn không? (và nếu vậy, phiên bản nào), hoặc nó là một dạng mở rộng?
Tôi có thể thấy điều này, nhưng đồng thời nó có vẻ dài dòng khủng khiếp cho những gì nên là một nhiệm vụ đơn giản.
—
cắm vào
Tôi nhớ MSVC (có lẽ chỉ 2015) cũng gặp vấn đề với việc bắt
—
Flamefire
this
và sử dụng nó trong lambda, đó cũng có thể là một lý do để sử dụng nó một cách rõ ràng
@plugwash: Các nhà phát triển có xu hướng luôn lười biếng và muốn giảm thiểu mọi thứ, và các nhà thiết kế ngôn ngữ cũng không khác. Tuy nhiên, tính dài dòng thường được yêu cầu để giải quyết sự mơ hồ, và đó là trường hợp ở đây.
—
Flater
this->
rõ ràng, đó là để đảm bảo rằng các giá trị được nắm bắt rõ ràng được sử dụng rõ ràng. Lưu ý rằng[](){ calstage1done(); }
sẽ không hợp pháp, vìthis
sẽ không bị bắt; nhưng khi chụpthis
một cách rõ ràng, thật đáng ngạc nhiên khi thân hàm xuất hiện trong nháy mắt không thực sự sử dụng giá trị đã chụp :[this](){ calstage1done(); }
.