조작 후 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!