为什么非范围 STL 算法不受 C++20 中概念的约束?

问题描述 投票:0回答:1

std::sort
std::ranges::sort
为例,
std::ranges::sort
中的迭代器类受到
std::random_access_iterator
概念的约束:

template< std::random_access_iterator I, std::sentinel_for<I> S,
          class Comp = ranges::less, class Proj = std::identity >
requires std::sortable<I, Comp, Proj>
constexpr I
    sort( I first, S last, Comp comp = {}, Proj proj = {} );

但是

std::sort
不是:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

为什么

std::sort
(以及所有非范围算法)不受约束?

一个相关问题:std::fill_n 和 std::ranges::fill_n 有什么区别?

c++ c++20 std-ranges
1个回答
0
投票

当然有现实和历史原因;但如果有人想考虑事后原因:

你会破坏很多代码,范围风格的要求比你想象的更受限制。有很多代码(自定义迭代器)几乎偶然与算法一起工作,并且绝对不能使用 std::ranges 算法进行编译。

© www.soinside.com 2019 - 2024. All rights reserved.