在下面的功能,我可以依靠捕獲變量「秩序」是最新的,即只是當lambda捕獲初始化?
- 將如預期的功能始終正常工作?
- 按價值或參考值進行捕獲是否存在差異?
- 函數是否可重入?
struct Entry
{
std::string name;
double earnings;
};
enum Column { Name, Earnings };
enum SortOrder { Ascending, Descending };
void sortByColumn(std::vector<Entry>& entries, Column column, SortOrder order)
{
std::function<bool(const Entry&, const Entry&)> comparators[] =
{
[&](const Entry& a, const Entry& b) { return order==Ascending ?
a.name < b.name : a.name > b.name; },
[=](const Entry& a, const Entry& b) { return order==Ascending ?
a.earnings < b.earnings : a.earnings > b.earnings; }
};
std::sort(entries.begin(), entries.end(), comparators[column]);
}
你可以找到一個完整的例子在這裏:http://coliru.stacked-crooked.com/a/240b74d1706a1b6f
[在C++ 11中,lambda表達式的綁定變量何時應該按值捕獲?]的可能重複(http://stackoverflow.com/questions/7881149/in-c11-when-are -a-lambda-expressions-bound-variables-expected-to-be-captured) –
@JamesElderfield我會爭辯說,這不是對鏈接問題的一個騙局,因爲它詢問MSVC行爲。答案是相關的,但問題本身不是一個騙局。 –