std::println
std::println (ostream에 개행 포함 형식화 출력)
형식 문자열 fmt에 따라 args를 포맷하고 끝에 '\n'을 붙여 os 스트림에 삽입하는 함수예요. 즉 각 출력이 개행으로 끝나요. C++23부터 있어요.
출처: cppreference
본문
<ostream> 헤더에 정의돼 있어요. std::print에 개행을 자동으로 덧붙인 버전이에요.
template< class... Args >
void println( std::ostream& os, std::format_string<Args...> fmt, Args&&... args ); // (1) (since C++23)
void println( std::ostream& os ); // (2) (since C++26)
형식 문자열 fmt에 따라 args를 포맷하고 끝에 '\n'을 붙인 뒤(즉 각 출력이 개행으로 끝남) os 스트림에 삽입해요.
- (1) 다음과 동일해요.
std::print(os, "{}\n", std::format(os.getloc(), fmt, args...)); - (2) 다음과 동일해요.
std::print(os, "\n");
Args의 어떤 Ti에 대해서도 std::formatter<Ti, char>가 BasicFormatter 요구사항을 만족하지 않으면 동작이 정의되지 않아요.
매개변수
os: 데이터를 삽입할 출력 스트림.fmt: 형식 문자열을 나타내는 객체 (기본 타입·chrono·range·tuple 등에 대해 각각의 형식 지정 문법을 따름).args...: 포맷할 인자들.
예외
- 할당 실패 시
std::bad_alloc. - 어떤 formatter가 던지는 예외(예:
std::format_error)는os.exceptions()값과 무관하게,os의 오류 상태에서ios_base::badbit를 켜지 않고 전파돼요. os로의 삽입이 실패하면 호출되는os.setstate(ios_base::badbit)때문에 생기는ios_base::failure를 던질 수 있어요.
참고
비록 오버로드 (2)가 C++26에서 추가됐지만, 알려진 모든 구현은 C++23 모드에서도 이것을 사용할 수 있게 해요.
피처 테스트 매크로 __cpp_lib_print(값 202207L, C++23, Formatted output)와 __cpp_lib_format(값 202207L, C++23, std::basic_format_string 노출)이 있어요.
결함 보고로 LWG 4088(C++23, (1)이 인자를 포맷할 때 os에 부여된 로케일을 무시 → 그런 로케일 사용)이 있어요.