을 읽었습니다. documentation for std::any_cast
을 읽었습니다. API가 캐스트 객체에 값을 반환하거나 포인터를 반환하는 것이 이상하다는 것을 알았습니다. 레퍼런스를 반환하지 않는 이유는 무엇입니까? 비 포인터 유형 인수로 함수를 호출 할 때마다 사본을 작성해야합니다.`std :: any_cast`가 복사본
캐스트의 포인터 버전이 의도를 조금 더 알 수 있고 조금 더 명확 할 수 있지만 반환 된 값이 이와 같은 참조가되지 않는 이유는 무엇입니까?
template<typename ValueType>
ValueType& any_cast(any* operand);
대신
template <typename ValueType>
ValueType* any_cast(any* operand);
또한의 당신이 캐스트가 참조를 제거하는 기준을 요구하는 경우에도처럼 보인다 저장된 객체에 복사 기능 과부하의 반환 값에 대한 설명을 참조를 반환 여기에 1-3 http://en.cppreference.com/w/cpp/utility/any/any_cast
그리고 만약 입력 포인터가'nullptr'이라면? 반환 된 참조를 만족시키기 위해 역 참조 할 수 없습니다. 당신이 정말로 묻고있는 것은 입력으로 참조를 취하는'any_cast'의 오버로드가 출력 대신 참조 대신 복사본을 반환하는 이유입니다. 맞습니까? –
'any_cast'는 당신이 그것을 말하면 참조를줍니다. 이것은'static_cast'가 항상 복사본을 반환한다고 말하는 것과 같습니다. – ildjarn
참조 할 수없는 주어진 유형의 유효한 포인터 값의 수는 표준 읽기 및 해당 표준의 진화에 따라 다르지만 nullpointer가 포함되어 있으므로 분명히 0보다 큽니다. –