gpt4 book ai didi

c++ - 在基于范围的 for 中强制使用 cbegin()/cend()

转载 作者:IT老高 更新时间:2023-10-28 12:41:28 29 4
gpt4 key购买 nike

这个问题指的是:

When should I use the new ranged-for and can I combine it with the new cbegin/cend?

基于那个问题,要强制使用 cbegin()cend(),需要这样做,例如:

for (auto& v: const_cast<decltype(container) const>(container))

对于一个应该消除它的构造来说,这是很多样板代码。有没有更紧凑的方法来做到这一点?我提出问题的原因是,隐式共享容器可能会将我对 begin() 的使用作为分离自身的线索。

最佳答案

更新: std::as_const 将在 C++17 中,在 <utility> 中标题。

在 C++17 之前,它没有内置语法;但是,您可以轻松编写一个方便的包装器:

template<typename T> constexpr const T &as_const(T &t) noexcept { return t; }
for (auto &v: as_const(container))

请注意,这会调用 begin() const而不是 cbegin()具体来说; Standard container general requirements指定 cbegin()begin() const行为相同。

如果你的容器特别对待非常量迭代,它本身有一个成员函数可能是有意义的:

const Container &crange() const noexcept { return *this; }
for (auto &v: container.crange())

关于c++ - 在基于范围的 for 中强制使用 cbegin()/cend(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15518894/

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