namespace std {
template <class T>
constexpr add_const_t<T>& as_const(T& t) noexcept;
template <class T>
void as_const(const T&&) = delete;
}
概要
左辺値参照をconst
左辺値参照にする。
const
と非const
のオーバーロードがある場合、const
版を明示的に呼び出す目的で使われる。
戻り値
add_const_t<T>&(t)
例外
投げない
例
#include <iostream>
#include <utility>
struct A {
void f()
{
std::cout << "non-const" << std::endl;
}
void f() const
{
std::cout << "const" << std::endl;
}
};
int main()
{
A a;
a.f(); // f()が呼ばれる
std::as_const(a).f(); // f() constが呼ばれる
}
22
#include <iostream>
#include <utility>
struct A {
void f()
{
std::cout << "non-const" << std::endl;
}
void f() const
{
std::cout << "const" << std::endl;
}
};
int main()
{
A a;
出力
non-const
const
バージョン
言語
- C++17
処理系
- Clang: 3.8 ✅
- GCC: 7.1 ✅
- ICC: ??
- Visual C++: 2015 Update 2 ✅