"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 왜`std :: vector :: Reference '가`bool &`를 반환하지 않습니까?

왜`std :: vector :: Reference '가`bool &`를 반환하지 않습니까?

2025-03-11에 게시되었습니다
검색:968

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

문제

CalliftOggled에 std :: vector 의 요소에 대한 참조를 전달하려고 할 때 컴파일 오류가 발생합니다. 이것은 벡터 :: 참조에 의해 반환 된 참조 유형이 예상되는 bool &.

  • 이유는 vector :: 참조를 부리가 아닌 숯으로 반환하기 때문입니다. 이것은 부울 값에 대한 약간의 표현을 사용하여 성능을 최적화하기 위해 수행됩니다.
  • 솔루션
벡터 를 사용하여 벡터를 사용하여 벡터를 사용하여 특수화 문제를 해결합니다.

#include 

struct A
{
    void foo() {}
};

template
void callIfToggled(char v1, char &v2, T &t)
{
    if (v1 != v2)
    {
        v2 = v1;
        t.foo();
    }
}

int main()
{
    std::vector 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);
}

Why Doesn't `std::vector::reference` Return a `bool&`?
라이브러리 :

부스트 컨테이너 라이브러리는 부울 값에 대한 진정한 참조를 제공하는 벡터 의 비 전문화 된 버전을 제공합니다. 이를 통해 래퍼에 대한 참조를 전달할 수 있습니다.이를 통해 기본 부울 값에 대한 간접 액세스를 제공합니다.

예제 (char의 벡터) :

#include include . 구조 a { void foo () {} }; 템플릿 void calliftoggled (char v1, char & v2, t & t) { if (v1! = v2) { v2 = v1; t.foo (); } } int main () { std :: vector 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); }

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3