gpt4 book ai didi

c++ - 给定 cbegin()、cend(),为什么没有 cfront()、cback()、cfind()、...?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:03 26 4
gpt4 key购买 nike

所以,为了让代码如

auto vect = ...;
auto it = vect.begin(), end = vect.end(); // want const_iterator, getting iterator

选择正确的 begin()end() 重载,即使对于非常量容器,更明确的 cbegin()/cend() 添加了函数。

为什么到此为止?

关联容器有一个 find() 方法有同样的问题。序列容器有 front()back(),同样有同样的问题。

这些缺失是明确的 const 版本遗漏,还是设计使然?

最佳答案

更广泛的 API 是有成本的,即使只是在寻找您想要的功能时跳过它也是如此。

template<class T>
T const as_const(T&& t) noexcept(noexcept(T(std::declval<T>())) {
return std::forward<T>(t);
}
template<class T>
T const& as_const(T& t) noexcept {
return t;
}

做你想做的大部分事情。它甚至会使 cbegin 过时。

(基于下面@T.C 提供的 n4380 对上面的代码进行的修改。代码不同,因为我认为 n4380 在 T&& 的情况下略有错误。)

关于c++ - 给定 cbegin()、cend(),为什么没有 cfront()、cback()、cfind()、...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com