#include <iostream>
void IsTrue(const bool value) {
if (value) {
std::cout << "value is True!\n";
}
}
int main()
{
IsTrue([]() { ; /* some lambda */ });
return 0;
}
Output:Tại sao một lambda chuyển đổi thành một bool có giá trị là đúng?
value is True!
Tại sao lambda đánh giá để true
trên GCC & Clang? MSVC không thể xây dựng này (không thể chuyển đổi lambda thành bool).
Đây có phải là lỗi trình biên dịch không? Hoặc đoạn nào của tiêu chuẩn cho phép điều này?
Không chắc chắn nếu điều này là hợp pháp hay không nhưng nó dường như chuyển đổi lambda thành một con trỏ hàm và sau đó sử dụng giá trị đó (không phải là null) vào bool để nó biên dịch. Nếu bạn thêm một capture [nó không biên dịch] (http://coliru.stacked-crooked.com/a/f28beac0173e86e4). – NathanOliver
MSVC có [một phần mở rộng không chuẩn] (https://adishavit.github.io/2016/magical-captureless-lambdas/), do đó, nó yêu cầu bạn phải khai báo rõ ràng loại con trỏ hàm đích, nếu không chuyển đổi sẽ thất bại. – cpplearner
Ngoài ra, hãy xem [Truyền lambda là con trỏ hàm] (http://stackoverflow.com/q/28746744/1708801) –