Update: std::as_const
will be in C++17, in the <utility>
header.
Prior to C++17, there's no built-in syntax for it; however, you can easily write a convenience wrapper:
template<typename T> constexpr const T &as_const(T &t) noexcept { return t; }
for (auto &v: as_const(container))
Note that this calls begin() const
rather than cbegin()
specifically; the Standard container general requirements specify that cbegin()
and begin() const
behave identically.
If your container treats non-const iteration specially, it might make sense for it itself to have a member function:
const Container &crange() const noexcept { return *this; }
for (auto &v: container.crange())
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…