std::experimental::ranges:: Assignable
|
헤더 파일에 정의됨
<experimental/ranges/concepts>
|
||
|
template
<
class
T,
class
U
>
concept
bool
Assignable
=
|
(ranges TS) | |
Assignable<T, U>
개념은
U
에 의해 지정된 유형 및 값 범주를 가진 표현식을
T
에 의해 지정된 유형을 가진 lvalue 표현식에 할당할 수 있음을 명시합니다.
주어진
-
t, 타입 std:: remove_reference_t < T > 의 lvalue로서 객체o를 참조하는 것, -
u, decltype ( ( u ) ) 가U인 표현식, -
u2,u와 동일한 값을 가지는 별개의 객체,
Assignable<T, U>
는 다음 조건에서만 만족됩니다
- std:: addressof ( t = u ) == std:: addressof ( o ) (즉, 대입 표현식은 좌측 피연산자를 참조하는 lvalue를 반환함);
-
t
=
u
평가 후:
-
t는u2와 동일함 (단,u가o를 참조하는 비-const xvalue인 경우, 즉 대입이 자기 이동 대입인 경우는 제외); -
u가 glvalue인 경우:- 비-const xvalue인 경우, 그것이 참조하는 객체는 유효하지만 지정되지 않은 상태임;
- 그렇지 않으면, 그것이 참조하는 객체는 수정되지 않음;
-
Assignable<T, U>
와
std::
is_lvalue_reference
<
T
>
::
value
사이에는 어떠한 포함 관계도 존재하지 않을 수 있습니다.
동등성 보존
표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존(equality preserving) 합니다.
- 표현식의 입력은 피연산자들로 구성됩니다.
- 표현식의 출력은 결과와 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.
동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체에 대한 이러한 표현식의 두 평가는 해당 입력 객체에 대한 명시적인 중간 수정이 없는 한 동일한 출력을 가져야 합니다.
달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.
참고 사항
{
expression
}
-
>
Same
<
T
>
&&
형태의 추론 제약은 효과적으로
decltype
(
(
expression
)
)
&&
가
T&&
와 정확히 동일한 타입이어야 함을 요구합니다. 이는 표현식의 타입과 값 범주 모두를 제약합니다.
대입 연산은 완전 함수일 필요가 없습니다. 특히, 어떤 객체
x
에 대입하는 것이 다른 객체
y
를 수정할 수 있는 경우,
x
=
y
는
=
의 정의역에 포함되지 않을 가능성이 높습니다. 이는 일반적으로 우측 피연산자가 좌측 피연산자에 직접적 또는 간접적으로 소유된 경우 발생합니다 (예: 노드 기반 데이터 구조의 스마트 포인터, 또는
std::
vector
<
std::
any
>
와 같은 경우).