2013-09-05 2 views
5

std::optional<T>에 대한 API를 cppreference에보고했습니다. 나는 궁금해서 어떻게 value_or가 작동 할까.후행 const & 또는 && 함수 선언

template< class U > 
constexpr T value_or(U&& value) const&; 

template< class U > 
T value_or(U&& value) &&; 

함수 선언 대열 const&&& 무엇입니까 : 거기에 보면, 두 개의 오버로드가 보인다? 함수를 선언하여 const으로 선언하고이를 const&이라고 선언하는 것과 다른 점은 무엇입니까?

+0

이것은 실제로 컴파일러가 최근에 지원을 얻은 C++ 11 기능입니다. – chris

+0

@chris 건배. * 이것에 대한 우세한 참조는 알고 있었지만, 구현 된 마지막 기능 중 하나 일 가능성이 높기 때문에 전혀 조사하지 않아도되었습니다. – Yuushi

+0

@chris 정직하게 나는이 질문에 답하기를 기다리고 있었다. 나는 잠시 전에 C++ 입문서에서 대답을 보았고 너무 나쁘다고 생각하지 않았다. ( – aaronman

답변

2

함수가 this는 좌변, 반대로 이중 앰퍼샌드 그것이 rval에 있어야합니다 것을 의미해야한다는 것을 의미 한 후, CONST 그냥 그래서 함수가 &으로 정규화 된 nonmodifiable LVAL 또는 rval에

있다고 말한다 ampresand 유일 수정 가능한 lval에서 작동하며 && 자격을 얻은 경우에만 규칙에 적용됩니다. 나는 const &&이 정말로 의미가 없으므로 const &은 임시에 바인딩 할 수 있으므로 const 한정자는 lval에 대해서만 수행합니다.