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에 부여된 로케일을 무시 → 그런 로케일 사용)이 있어요.

더 알아보기 (Learn more)

cppreference