3
什麼不合格捕獲lambda被傳遞給apply
方法std::valarray
? 考慮下面的代碼:爲什麼捕獲lambda不能應用於std :: valarray?
int main()
{
std::valarray<int> arr = {1, 2, 3, 4, 5, 6};
auto arr1 = arr.apply([](int val) { return val * 2; }); // compiles
int n = 3;
auto arr2 = arr.apply([n](int val) { return val * n; }); //does not compile
return 0;
}
住在coliru http://coliru.stacked-crooked.com/a/f0407046699574fc
測試在https://gcc.godbolt.org/
無論是GCC也不MSVC或鐺將編譯上面的代碼
任何想法爲什麼它是在第一個地方完成?也許是因爲它會使向量化或並行化優化不適用於這種「應用」實現? – kreuzerkrieg
@kreuzerkrieg - 'std :: valarray'早在我們引入一種語言的lambda之前就已經構思出來了。另外,我想這會鼓勵傳遞「純粹」功能。我知道,在現代C++中,這是突出的。 – StoryTeller
ummm ...他們爲valarrays添加了std :: begin/end C++ 11的特化功能,爲什麼不添加其他的現代功能...嗯,我想簡單地說valarray並沒有像其他的那樣廣泛使用STL容器。 – kreuzerkrieg