neo*_*nxc 6 c++ language-lawyer
我最近偶然发现了cppreference中的这个措辞:
与其他算法不同,for_each不允许复制序列中的元素,即使它们可以轻易复制.
声明是否正确?我没有在标准中找到任何理由.我能理解得很清楚吗?暗示以下示例来自同一页面无效?
struct Sum
{
Sum(): sum{0} { }
void operator()(int n) { sum += n; }
int sum;
};
int main()
{
std::vector<int> nums{3, 4, 2, 8, 15, 267};
// ...
// calls Sum::operator() for each number
Sum s = std::for_each(nums.begin(), nums.end(), Sum());
// ...
}
Run Code Online (Sandbox Code Playgroud)
措辞确实令人困惑,因为还提到
函数的签名应等效于以下内容:
void fun(const Type &a);
签名不需要有 const &。
我认为您需要看到这样一个事实:for_each
不允许复制元素作为标准向用户提供的保证,而不是对应用于每个元素的用户谓词函数的限制。