"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > `if` 문 너머: 명시적 `bool` 변환이 있는 유형을 형변환 없이 사용할 수 있는 다른 곳은 어디입니까?

`if` 문 너머: 명시적 `bool` 변환이 있는 유형을 형변환 없이 사용할 수 있는 다른 곳은 어디입니까?

2024-11-08에 게시됨
검색:297

Beyond `if` Statements: Where Else Can a Type with an Explicit `bool` Conversion Be Used Without Casting?

형변환 없이 허용되는 bool로의 상황별 변환

귀하의 클래스는 bool로의 명시적인 변환을 정의하여 해당 인스턴스 't'를 조건문에서 직접 사용할 수 있도록 합니다. 그러나 이 명시적인 변환은 다음과 같은 질문을 제기합니다. 캐스트 없이 't'를 부울로 사용할 수 있는 곳은 어디입니까?

상황별 변환 시나리오

C 표준에서는 4가지를 지정합니다. 값이 상황에 따라 bool로 변환될 수 있는 주요 시나리오:

문:

  • if, while, for, do-while 문

    if (t)
      /* statement */;

표현:

  • 부정(!), ​​논리 AND(&&), 논리 OR(||), 삼항 연산자(?)

    !t
    t && t2

컴파일 시간 테스트:

  • static_assert, noException, 명시적, if constexpr(constexpr 변환 필요 연산자)

    static_assert(t);
    noexcept(t)

알고리즘 및 개념:

  • NullablePointer, STL 알고리즘의 조건자 또는 비교기 인수

    NullablePointer T
    std::remove_if(first, last, [&](auto){ return t; });

추가 참고 사항:

  • 컴파일 타임 테스트(C 26 이상)에서는 0과 1 이외의 정수로부터의 축소 변환이 허용되지 않습니다.
  • const와 non-const 변환 연산자를 혼합하면 혼란을 초래할 수 있습니다.
최신 튜토리얼 더>

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

Copyright© 2022 湘ICP备2022001581号-3