當我用[=]
寫一個lambda時,這是否意味着我的所有局部變量都將被複制到創建的結構的成員中,或者我可以假設只有那些將在lambda中實際使用的變量?例如:是否[=]暗示所有局部變量將被複制?
void f()
{
vector<int> v(10000);
const int n = 5;
const int DivByNCnt = count_if(istream_iterator<int>(cin), istream_iterator<int>(),
[=](int i)
{
return i % n == 0;
});
}
以下哪項是真的?
- 兩個N和V將被複制
- n將被複制,V不會
- n將被複制,V可以或可以不依賴於implmenentation /優化設置複製。
假設參數的緣故,vector的拷貝構造函數有副作用。
不知道任何關於C++ 11語義的知識,除了只有'n'被捕獲的任何東西,對於每一種其他語言的語義都具有一流的匿名函數和適當的關閉。 – Gian 2013-03-25 10:22:23