수정 후 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를 사용하는 것이 포함됩니다. 스트림의 형식 지정 플래그를 캡처하고 복원하는 클래스입니다. 방법은 다음과 같습니다.
std::cout:
std::ios_base::fmtflags f( cout.flags() );
수정하는 함수의 시작 부분에서 f 변수에 현재 서식 플래그를 저장합니다.
함수 끝에서 스트림을 원래 상태로 되돌린 후:
cout.flags( f );
처음에 캡처된 형식 지정 플래그를 복원합니다. ~의 function.
예
아래 코드 조각에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!