namespace std {
template <class T>
reference_wrapper<const T> cref(const T& t) noexcept; // (1) C++11
template <class T>
constexpr reference_wrapper<const T> cref(const T& t) noexcept; // (1) C++20
template <class T>
reference_wrapper<const T> cref(reference_wrapper<T> t) noexcept; // (2) C++11
template <class T>
constexpr reference_wrapper<const T> cref(reference_wrapper<T> t) noexcept; // (2) C++20
template <class T>
void cref(const T&&) = delete; // (3)
}
概要
変数へのconst
参照t
を保持するreference_wrapper
オブジェクトを生成する。
C++20からは、テンプレートパラメーターT
は不完全型をサポートしている。
戻り値
- (1) :
t
を参照するreference_wrapper<const T>
オブジェクトを返す。 - (2) :
t
をそのまま返す。
例外
投げない
例
#include <iostream>
#include <functional>
int main()
{
int x = 3;
// 参照ラッパーrは、変数xへのconst参照を保持する
std::reference_wrapper<const int> r = std::cref(x);
++x;
const int& rx = r.get();
std::cout << rx << std::endl;
}
16
#include <iostream>
#include <functional>
int main()
{
int x = 3;
// 参照ラッパーrは、変数xへのconst参照を保持する
std::reference_wrapper<const int> r = std::cref(x);
++x;
const int& rx = r.get();
std::cout << rx << std::endl;
}
出力
4
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: ??
参照
- P0357R3 reference_wrapper for incomplete types
- テンプレートパラメータ
T
に不完全型が許可された経緯
- テンプレートパラメータ
- P1065R2 constexpr INVOKE