stdout 버퍼 주위에 다른 래퍼를 만들 수 있습니다.
#include <iostream>
#include <iomanip>
int main() {
int x = 76;
std::ostream hexcout (std::cout.rdbuf());
hexcout << std::hex;
std::cout << x << "\n"; // still "76"
hexcout << x << "\n"; // "4c"
}
함수에서 :
void print(std::ostream& os) {
std::ostream copy (os.rdbuf());
copy << std::hex;
copy << 123;
}
물론 성능이 문제 ios
라면 비용은 지불하지만 로케일과 같이 사용하지 않을 것 같은 일부를 포함 하여 전체 객체 (버퍼는 아님)를 복사하기 때문에 약간 더 비쌉니다 .
그렇지 않으면 사용 .flags()
하려는 .setf()
경우 <<
구문 (순수한 스타일 문제) 보다는 일관성 있고 사용하는 것이 더 낫다고 생각합니다 .
void print(std::ostream& os) {
std::ios::fmtflags os_flags (os.flags());
os.setf(std::ios::hex);
os << 123;
os.flags(os_flags);
}
다른 사람들이 말했듯이 편의를 위해 클래스에 위의 (및 .precision()
및 .fill()
, 그러나 일반적으로 수정되지 않고 더 무거운 로케일 및 단어 관련 항목이 아님) 클래스에 넣을 수 있으며 예외로부터 안전합니다. 생성자는 std::ios&
.