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

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

DDD
풀어 주다: 2024-12-04 05:56:17
원래의
1031명이 탐색했습니다.

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

조작 후 std::cout 상태 복원

C에서는 std::cout과 같은 스트림을 조작하여 형식과 동작을 변경할 수 있습니다. 그러나 이러한 조작 후에는 스트림의 원래 상태를 복원해야 할 수도 있습니다.

다음 코드가 있다고 가정합니다.

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에 대한 후속 호출도 16진수로 인쇄되어 잠재적으로 예기치 않은 동작이 발생할 수 있습니다.

std::cout의 원래 상태를 복원하려면 스트림 플래그를 사용할 수 있습니다.

#include <iostream>

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

    printHex(std::cout);

    cout.flags(f); // Restore original flags

    std::cout << 73; // prints 73 in decimal
}
로그인 후 복사

이 예에서 fmtflags 객체 f는 std::cout의 원래 스트림 플래그를 저장합니다. printHex()를 호출한 후 cout.flags(f)를 사용하여 명시적으로 스트림 플래그를 f의 값으로 다시 설정합니다. 이렇게 하면 std::cout의 상태가 원래 설정으로 복원됩니다.

스트림 플래그를 활용하고 적절하게 복원하면 형식 지정 동작에 대한 제어를 유지하면서 스트림을 조작할 수 있으며 잘못된 숫자 형식과 같은 의도하지 않은 결과를 방지할 수 있습니다. 이 사건.

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

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