> 백엔드 개발 > C++ > `std::Vector::reference`가 `bool&`을 반환하지 않는 이유는 무엇입니까?

`std::Vector::reference`가 `bool&`을 반환하지 않는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-09 00:42:10
원래의
836명이 탐색했습니다.

Why Doesn't `std::vector::reference` Return a `bool&`?

왜 vector::reference가 Bool에 대한 참조를 반환하지 않습니까?

C에서 std::Vector

문제

제공된 예에서 callIfToggled 함수는 부울 값과 구조체에서 메서드를 호출합니다. std::Vector의 요소에 대한 참조를 전달하려고 할 때; IfToggled를 호출하면 컴파일 오류가 발생합니다. 이는 vector::reference에 의해 반환된 참조 유형이 예상된 bool&이 아니기 때문입니다.

이유

bool 벡터 전문화 내에서 vector

솔루션

  • 벡터 대신: 부울 벡터를 벡터 전문화 문제를 해결하려면

  • Boost 컨테이너 라이브러리 사용: Boost 컨테이너 라이브러리는 특수화되지 않은 버전의 벡터 이는 부울 값에 대한 실제 참조를 제공합니다.
  • 구조에서 부울 값 래핑: MyBool이라는 부울 주위에 래퍼 구조체를 만듭니다. 이를 통해 래퍼에 대한 참조를 전달할 수 있으며, 이는 기본 bool 값에 대한 간접적인 액세스를 제공합니다.
  • 예(Char 벡터):

    #include <vector>
    
    struct A
    {
        void foo() {}
    };
    
    template<typename T>
    void callIfToggled(char v1, char &v2, T &t)
    {
        if (v1 != v2)
        {
            v2 = v1;
            t.foo();
        }
    }
    
    int main()
    {
        std::vector<char> v = { false, true, false };
    
        const char f = false;
        A a;
    
        callIfToggled(f, v[0], a);
        callIfToggled(f, v[1], a);
        callIfToggled(f, v[2], a);
    }
    로그인 후 복사

    위 내용은 `std::Vector::reference`가 `bool&`을 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿