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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-07 00:49:13302검색

How Can I Restore the Original State of std::cout After Manipulating Its Formatting Flags?

조작 후 std::cout 상태 복원

C에서 std::cout과 같은 I/O 스트림 상태 수정 , 후속 작업에서 의도하지 않은 결과를 초래할 수 있습니다. 다음 코드 조각을 고려하십시오.

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..
}

이 예에서 std::cout은 printHex 함수에 의해 수정되어 16진수로 인쇄됩니다. 그러나 이 수정 사항은 메인으로 돌아갈 때 지속되어 std::cout을 사용한 후속 출력이 10진수 대신 16진수로 인쇄됩니다.

이 문제를 해결하려면 std::cout의 원래 상태를 복원해야 합니다. printHex 함수가 완료된 후. 이는 std::ios_base의 플래그 멤버 함수를 사용하여 달성할 수 있습니다.

#include <ios>
#include <iostream>

int main(){
    std::ios_base::fmtflags f( std::cout.flags() );

    std::cout << 100; // prints 100 base 10
    printHex(std::cout); //prints 123 in hex

    std::cout.flags( f );

    std::cout << 73; //prints 73 base 10
}

수정하기 전에 std::cout.flags()를 사용하여 현재 플래그를 캡처하면 std::를 사용하여 복원할 수 있습니다. cout.flags(f)를 사용하여 스트림 상태를 원래 형식으로 재설정합니다.

이 기술을 사용하면 I/O 스트림 속성을 임시로 수정할 수 있습니다. 후속 I/O 작업이 예상대로 수행되도록 합니다.

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

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