6
考慮下面的代碼:Lambda捕獲導致不兼容的操作數類型錯誤?
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
}
當鏗鏘3.1編譯的,非捕獲拉姆達的分配工作,而一個與捕獲失敗:
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
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
爲什麼捕捉相同的變量將導致2個lambda需要不兼容的類型?
感謝您的詳細解釋。我不知道他們的實施方式不同。現在有道理。 – 2012-07-10 12:24:47