std::exchange
规定如下:
template< class T, class U = T > T exchange( T& obj, U&& new_value );
将
obj
的值替换为new_value
,并返回旧值obj
。
以下是来自cppreference的可能实现:
template<class T, class U = T>
T exchange(T& obj, U&& new_value)
{
T old_value = std::move(obj);
obj = std::forward<U>(new_value);
return old_value;
}
据我所见,没有什么能阻止std::exchange
被标记为constexpr
。 有理由我错过了为什么它不能constexpr
,或者这只是一个疏忽?
答案 0 :(得分:22)
从最新的C ++ 20草案开始,在the Albuquerque ISO C++ committee meeting之后,std::exchange
成为constexpr
并接受the proposal P0202R2。