본문 바로가기
C++

[C++ 23] std::print, std::println 사용하기

by 코드쉼터 2024. 4. 15.

[C++98] std::cout 문법은 [C언어] printf() 에 비해 개체지향적 특성을 반영하여 다형성을 지원하고 (타입에 유연) 연산자 오버로딩을 활용하여 기능을 변경할 수 있는 유연성을 가졌지만, 성능이 느리고, 여러개의 요소를 연쇄적으로 출력할때 코드가 상당히 길어지며, 출력 형식을 바꾸기 위해서 io manipulator 사용시 코드가 상당히 지저분해지는 단점이 있었습니다.

 

이를 해결하기 위해 나온 것이 [C++ 23] std::print, std::println 입니다. 현대적 언어 (예: 파이썬) 와 문법이 비슷해졌음을 알 수 있습니다.

사용을 위해선 #include <print> 헤더를 추가해야 합니다.

 

사용 예시 (std::print 와 std::println 차이점)

#include <print>
 
int main()
{
    // std::println 은 문자열 출력이 끝나면 자동으로 개행합니다.
    std::println("Please");
    std::println("enter");
 	
    // std::print 는 개행하지 않습니다.
    std::print("pass");
    std::print("word");
 	
    // 아래와 같이 아무 인자 없이 std::println() 를 호출해 개행하는 것은 [C++ 26] 까지만 허용하며,
    // 이후에는 std::print("\n") 와 같이 항상 인자를 전달해서 개행해야 합니다.
    std::println();
}

// 출력 결과
Please
enter
password

 

 

사용 예시 (중괄호 표기법)

#include <print>
 
int main()
{
    int num1 = 123;
    int num2 = 456;
    
    // 중괄호 {} 안에 아무것도 넣지 않으면 두번째 인자로부터 차례대로 대체됩니다.
    std::print("{} + {} = {}! \n", num1, num2, "모르겠어요");
    
    // 중괄호 {} 안에 숫자를 넣으면 해당 번째의 인자를 뽑아서 대체합니다.
    // {0} 은 두번째 인자, {1} 은 세번째, .. 를 의미합니다.
    std::print("{0} + {0} = {1}! \n", num1, num2);
    
}

// 출력 결과
123 + 456 = 모르겠어요!
123 + 123 = 456!

 

 

참고자료

https://en.cppreference.com/w/cpp/io/print

https://en.cppreference.com/w/cpp/io/println

https://en.cppreference.com/w/cpp/utility/format/formatter