Tôi vừa mới stumbled khi từ ngữ này từ cppreference:Chức năng có được chuyển tới std :: for_each được phép sao chép các phần tử chuỗi không?
Không giống như phần còn lại của các thuật toán, for_each không được phép làm bản sao của các yếu tố trong dãy số chẵn nếu họ trivially copyable.
Tuyên bố có đúng không? Tôi đã không tìm thấy bất kỳ căn cứ nào trong tiêu chuẩn. Tôi hiểu rõ, nó sẽ btw. ngụ ý ví dụ sau từ cùng một trang không hợp lệ?
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());
// ...
}
'std :: for_each' trả về khoảng trống, vì vậy việc này sẽ không biên dịch. Bạn đang tìm kiếm 'std :: accumulate' –
Tôi sợ Bạn sai về điều này.Dù sao, đây không phải là điểm của câu hỏi và tôi không tìm kiếm bất kỳ giải pháp cụ thể nào. – neonxc
Nó có thể là do việc thực hiện for_each có thể được viết mà không yêu cầu loại giá trị của các trình vòng lặp không tham chiếu đáp ứng yêu cầu của CopyConstructible. Nếu đó là trường hợp thì bạn không có guarrantee mã mà giả định loại là CopyConstructable sẽ làm việc. –