>백엔드 개발 >C++ >서식 플래그를 수정한 후 std::cout의 원래 상태를 어떻게 복원할 수 있습니까?

서식 플래그를 수정한 후 std::cout의 원래 상태를 어떻게 복원할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-02 15:11:13638검색

How Can I Restore the Original State of std::cout After Modifying its Formatting Flags?

수정 후 std::cout 상태 복원

C에서 입력/출력 스트림을 조작하면 상태가 일시적으로 변경될 수 있습니다. 예를 들어, 아래 코드 조각은 std::cout의 베이스를 16진수로 수정합니다:

void printHex(std::ostream& x){
    x << std::hex << 123;
}

int main(){
    std::cout << 100; // prints 100 base 10
    printHex(std::cout); // prints 123 in hex
    std::cout << 73; // problem! prints 73 in hex..
}

printHex에서 반환된 후 std::cout에 대한 후속 출력은 계속해서 16진수 베이스를 사용하므로 잠재적으로 다음과 같은 결과가 발생할 수 있습니다. 예상치 못한 결과. 이 문제를 해결하려면 std::cout의 원래 상태를 복원하는 방법이 필요합니다.

해결책

해결책에는 std::ios_base::fmtflags를 사용하는 것이 포함됩니다. 스트림의 형식 지정 플래그를 캡처하고 복원하는 클래스입니다. 방법은 다음과 같습니다.

  1. 또는 .
  2. std::cout:

    std::ios_base::fmtflags f( cout.flags() );

    수정하는 함수의 시작 부분에서 f 변수에 현재 서식 플래그를 저장합니다.

  3. 필요한 수정을 수행합니다. std::cout.
  4. 함수 끝에서 스트림을 원래 상태로 되돌린 후:

    cout.flags( f );

    처음에 캡처된 형식 지정 플래그를 복원합니다. ~의 function.

  5. 아래 코드 조각에서 RestoreCoutState 함수는 std::cout:

    의 상태를 캡처하고 복원합니다.
    void restoreCoutState(std::ostream& os){
        std::ios_base::fmtflags f( os.flags() );
        os << std::hex << 123;
        os.flags( f );
    }
    
    int main(){
        std::cout << 100; // prints 100 base 10
        restoreCoutState(std::cout); // prints 123 in hex
        std::cout << 73; // prints 73 base 10
    }

    위 내용은 서식 플래그를 수정한 후 std::cout의 원래 상태를 어떻게 복원할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.