<utility>
함수
as_const
template <class T> constexpr add_const_t<T>& as_const(T& t) noexcept;
template <class T> void as_const(const T&&) = delete;
Return Value
T
을(를) 반환합니다.
declval
template <class T> add_rvalue_reference_t<T> declval() noexcept; // as unevaluated operand
exchange
(C++14)
개체에 새 값을 할당하고 이전 값을 반환합니다.
template <class T, class Other = T>
T exchange(T& val, Other&& new_val)
매개 변수
val
의 값을 받을 개체입니다 new_val
.
new_val
값이 복사되거나 로 이동되는 val
개체입니다.
설명
복합 형식 exchange
의 경우 이동 생성자를 사용할 수 있을 때 이전 값을 복사하지 않고, 임시 개체이거나 이동된 경우 새 값을 복사하지 않으며, 사용 가능한 변환 할당 연산자를 사용하여 모든 형식을 새 값으로 허용합니다. 교환 함수는 왼쪽 인수가 오른쪽 인수로 이동되거나 복사되지 않는다는 측면에서 다릅니다 std::swap
.
예시
다음 예제에서는 exchange
를 사용하는 방법을 보여 줍니다. 실제로 exchange
는 복사하는 데 비용이 많이 드는 큰 개체에서 가장 유용합니다.
#include <utility>
#include <iostream>
using namespace std;
struct C
{
int i;
//...
};
int main()
{
// Use brace initialization
C c1{ 1 };
C c2{ 2 };
C result = exchange(c1, c2);
cout << "The old value of c1 is: " << result.i << endl;
cout << "The new value of c1 after exchange is: " << c1.i << endl;
return 0;
}
The old value of c1 is: 1
The new value of c1 after exchange is: 2
forward
인수가 rvalue 또는 rvalue 참조인 경우 rvalue 참조에 대한 해당 인수를 조건적으로 캐스팅합니다. 그러면 인수의 rvalue 특성이 전달 함수로 복원되어 완벽하게 전달됩니다.
template <class Type> // accepts lvalues
constexpr Type&& forward(typename remove_reference<Type>::type& Arg) noexcept
template <class Type> // accepts everything else
constexpr Type&& forward(typename remove_reference<Type>::type&& Arg) noexcept
매개 변수
Type
Arg
에 전달된 값 형식(Arg
형식과 다를 수 있음)입니다. 일반적으로 전달 함수의 템플릿 인수에 의해 결정됩니다.
Arg
캐스팅할 인수입니다.
Return Value
Arg
에 전달된 값이 원래 rvalue였거나 rvalue에 대한 참조였던 경우 Arg
에 대한 rvalue를 반환합니다. 그렇지 않으면 해당 형식을 수정하지 않고 Arg
를 반환합니다.
설명
forward
를 호출하려면 명시적 템플릿 인수를 지정해야 합니다.
forward
는 인수를 전달하지 않습니다. 대신 원래 rvalue 또는 rvalue 참조였던 경우 해당 인수를 rvalue 참조에 조건적으로 캐스팅하면 forward
를 사용하여 컴파일러에서 전달된 인수의 원래 형식을 알고 오버로드 해결을 수행할 수 있습니다. 전달 함수에 대한 인수의 명백한 형식은 원래 형식과 다를 수 있습니다. 예를 들어 rvalue가 함수에 대한 인수로 사용되고 매개 변수 이름에 바인딩되는 경우 이름이 있으면 실제로 rvalue로 존재하는 값이 무엇이든 간에 lvalue forward
가 되므로 인수의 rvalue-ness가 복원됩니다.
오버로드 확인을 수행하도록 인수의 원래 값의 rvalue-ness를 복원하는 것을 완벽한 전달이라고 합니다. 완벽한 전달을 사용하면 템플릿 함수에서 참조 형식의 인수를 허용하고 올바른 오버로드 해결을 위해 필요할 때 rvalue 특성을 복원할 수 있습니다. 완벽한 전달을 수행하면 rvalue에 대해 이동 의미 체계를 보존하고 인수의 참조 형식만 다른 함수의 오버로드를 제공하지 않아도 됩니다.
from_chars
from_chars_result from_chars(const char* first, const char* last, see below& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, float& value, chars_format fmt = chars_format::general);
from_chars_result from_chars(const char* first, const char* last, double& value, chars_format fmt = chars_format::general);
from_chars_result from_chars(const char* first, const char* last, long double& value, chars_format fmt = chars_format::general);
get
인덱스 위치 또는 형식을 기준으로 pair
개체에서 요소를 가져옵니다.
// get reference to element at Index in pair Pr
template <size_t Index, class T1, class T2>
constexpr tuple_element_t<Index, pair<T1, T2>>&
get(pair<T1, T2>& Pr) noexcept;
// get reference to element T1 in pair Pr
template <class T1, class T2>
constexpr T1& get(pair<T1, T2>& Pr) noexcept;
// get reference to element T2 in pair Pr
template <class T2, class T1>
constexpr T2& get(pair<T1, T2>& Pr) noexcept;
// get const reference to element at Index in pair Pr
template <size_t Index, class T1, class T2>
constexpr const tuple_element_t<Index, pair<T1, T2>>&
get(const pair<T1, T2>& Pr) noexcept;
// get const reference to element T1 in pair Pr
template <class T1, class T2>
constexpr const T1& get(const pair<T1, T2>& Pr) noexcept;
// get const reference to element T2 in pair Pr
template <class T2, class T1>
constexpr const T2& get(const pair<T1, T2>& Pr) noexcept;
// get rvalue reference to element at Index in pair Pr
template <size_t Index, class T1, class T2>
constexpr tuple_element_t<Index, pair<T1, T2>>&&
get(pair<T1, T2>&& Pr) noexcept;
// get rvalue reference to element T1 in pair Pr
template <class T1, class T2>
constexpr T1&& get(pair<T1, T2>&& Pr) noexcept;
// get rvalue reference to element T2 in pair Pr
template <class T2, class T1>
constexpr T2&& get(pair<T1, T2>&& Pr) noexcept;
매개 변수
Index
선택한 요소의 0부터 시작하는 인덱스입니다.
T1
첫 번째 pair 요소의 형식입니다.
T2
두 번째 pair 요소의 형식입니다.
pr
선택할 쌍입니다.
설명
각각의 템플릿 함수는 pair
인수의 요소에 대한 참조를 반환합니다.
인덱싱된 오버로드에 대해 Index
의 값이 0이면 함수는 pr.first
를 반환하고, Index
의 값이 1이면 함수는 pr.second
를 반환합니다. RI
형식은 반환된 요소의 형식입니다.
매개 변수가 없는 Index
오버로드의 경우 반환할 요소는 형식 인수로 추론됩니다. 호출 get<T>(Tuple)
하면 형식T
의 요소가 두 개 이하인 경우 pr
컴파일러 오류가 발생합니다.
예시
#include <utility>
#include <iostream>
using namespace std;
int main()
{
typedef pair<int, double> MyPair;
MyPair c0(9, 3.14);
// get elements by index
cout << " " << get<0>(c0);
cout << " " << get<1>(c0) << endl;
// get elements by type (C++14)
MyPair c1(1, 0.27);
cout << " " << get<int>(c1);
cout << " " << get<double>(c1) << endl;
}
9 3.14
1 0.27
index_sequence
template<size_t... I>
using index_sequence = integer_sequence<size_t, I...>;
index_sequence_for
template<class... T>
using index_sequence_for = make_index_sequence<sizeof...(T)>;
make_index_sequence
template<size_t N>
using make_index_sequence = make_integer_sequence<size_t, N>;
make_integer_sequence
template<class T, T N>
using make_integer_sequence = integer_sequence<T, see below >;
make_pair
pair
형식의 개체를 만드는 데 사용할 수 있는 템플릿 함수. 여기서 구성 요소 형식은 매개 변수로 전달된 데이터 형식을 기준으로 자동 선택됩니다.
template <class T, class U>
pair<T, U> make_pair(T& Val1, U& Val2);
template <class T, class U>
pair<T, U> make_pair(T& Val1, U&& Val2);
template <class T, class U>
pair<T, U> make_pair(T&& Val1, U& Val2);
template <class T, class U>
pair<T, U> make_pair(T&& Val1, U&& Val2);
매개 변수
Val1
pair
의 첫 번째 요소를 초기화하는 값
Val2
pair
의 두 번째 요소를 초기화하는 값
Return Value
생성된 pair
>Val2
<T
U
Val1
pair 개체입니다.
설명
make_pair
는 클래스 형식 reference_wrapper
의 개체를 참조 형식으로 변환하고 부패하는 배열과 함수를 포인터로 변환합니다.
반환된 pair
개체에서 T
은 다음과 같이 결정됩니다.
입력 형식
T
이reference_wrapper<X>
인 경우 반환된 형식T
은X&
입니다.그렇지 않은 경우, 반환된 형식
T
은decay<T>::type
입니다. 클래스가 지원되지 않는 경우decay
반환된 형식T
은 입력 형식T
과 동일합니다.
반환된 형식 U
는 마찬가지로 입력 형식 U
에서 결정됩니다.
한 가지 장점 make_pair
은 저장되는 개체의 형식이 컴파일러에 의해 자동으로 결정되며 명시적으로 지정할 필요가 없다는 것입니다. 자세한 정보 표시이고 컴파일 실패를 일으킬 수 있는 복잡한 rvalue 참조 문제를 추가하므로 사용할 make_pair
때와 같은 make_pair<int, int>(1, 2)
명시적 템플릿 인수를 사용하지 마세요. 이 예제에서 올바른 구문은 make_pair(1, 2)
입니다.
make_pair
도우미 함수도 입력 매개 변수로 한 쌍이 필요한 함수에 두 값을 전달할 수 있습니다.
예시
도우미 함수 make_pair
를 사용하여 쌍을 선언하고 초기화하는 방법에 대한 예제는 Structure를 참조하세요pair
.
move
무조건 인수를 rvalue 참조로 캐스트합니다. 따라서 형식이 이동 가능할 경우 이동 가능하다는 신호를 줍니다.
template <class Type>
constexpr typename remove_reference<Type>::type&& move(Type&& Arg) noexcept;
매개 변수
Type
참조 축소 규칙과 함께 Arg
에 전달된 인수의 형식에서 추론된 형식입니다.
Arg
캐스팅할 인수입니다. Arg
의 형식이 rvalue 참조로 지정되는 것처럼 보여도 lvalue 참조가 rvalue 참조에 바인딩될 수 있기 때문에 move
도 lvalue 인수를 수용합니다.
Return Value
형식과 상관없이, rvalue 참조로서의 Arg
는 참조 형식입니다.
설명
템플릿 인수 Type
는 명시적으로 지정되지 않고 전달된 Arg
값의 형식에서 추론됩니다. Type
의 형식은 참조 축소 규칙에 따라 추가 조정됩니다.
move
는 인수를 이동하지 않습니다. 대신, lvalue일 수 있는 인수를 무조건 rvalue로 캐스트할 경우 Arg
형식에 이동이 활성화되어 있으면 컴파일러가 나중에 해당 형식에 전달된 값을 복사하지 않고 이동합니다. 해당 형식이 이동 가능하지 않은 경우 대신 복사됩니다.
Arg
에 전달된 값이 lvalue인 경우, 즉 이름이 있거나 주소를 가져올 수 있는 경우, 이동이 발생하면 무효화됩니다. 이동한 후 이름 또는 주소로 Arg
전달된 값을 참조하지 마세요.
move_if_noexcept
template <class T> constexpr conditional_t< !is_nothrow_move_constructible_v<T> && is_copy_constructible_v<T>, const T&, T&&> move_if_noexcept(T& x) noexcept;
swap
두 형식 또는 pair
Structure 개체의 요소를 교환합니다.
template <class T>
void swap(T& left, T& right) noexcept(see below );
template <class T, size_t N>
void swap(T (&left)[N], T (&right)[N]) noexcept(is_nothrow_swappable_v<T>);
template <class T, class U>
void swap(pair<T, U>& left, pair<T, U>& right);
매개 변수
left
형식 또는 형식 pair
의 개체입니다.
right
형식 또는 형식 pair
의 개체입니다.
설명
한 가지 장점 swap
은 저장되는 개체의 형식이 컴파일러에 의해 자동으로 결정되며 명시적으로 지정할 필요가 없다는 것입니다. 자세한 정보 표시이고 컴파일 실패를 일으킬 수 있는 복잡한 rvalue 참조 문제를 추가하므로 사용할 swap
때와 같은 swap<int, int>(1, 2)
명시적 템플릿 인수를 사용하지 마세요.
to_chars
to_chars_result to_chars(char* first, char* last, see below value, int base = 10);
to_chars_result to_chars(char* first, char* last, float value);
to_chars_result to_chars(char* first, char* last, double value);
to_chars_result to_chars(char* first, char* last, long double value);
to_chars_result to_chars(char* first, char* last, float value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, double value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, float value, chars_format fmt, int precision);
to_chars_result to_chars(char* first, char* last, double value, chars_format fmt, int precision);
to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt, int precision);
설명
유효한 범위여야 하는 범위를 [first, last)
[first, last)
채워 값을 문자열로 변환합니다.