Xét đoạn mã sau:Chụp Lambda gây ra lỗi loại toán hạng không tương thích?
main()
{
bool t;
...
std::function<bool (bool)> f = t ? [](bool b) { return b; } : [](bool b) { return !b; }; // OK
std::function<bool (bool)> f = t ? [t](bool b) { return t == b; } : [t](bool b) { return t != b; }; // error
}
Khi biên soạn với Clang 3.1, việc chuyển nhượng không chụp lambda hoạt động trong khi một với ảnh chụp không:
main.cpp:12:36: error: incompatible operand types ('<lambda at main.cpp:12:38>' and '<lambda at main.cpp:12:71>')
std::function<bool (bool)> f2 = t ? [t](bool b) { return t == b; } : [t](bool b) { return t != b; }; // error
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tại sao chụp cùng một biến gây ra 2 lambdas là loại không tương thích?
Cảm ơn bạn đã giải thích chi tiết. Tôi không biết chúng được thực hiện khác nhau. Nó có ý nghĩa bây giờ. –