일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- virtual function table
- dynamic_cast
- std::vector
- suffix return type
- diamond inheritance
- std::ostream
- c++ basic practice
- virtual function
- discord bot
- conversion constructor
- vector capacity
- virtual inheritance
- member function pointer
- C++
- new&delete
- std::endl
- constructor
- return by reference
- placement new
- this call
- vector size
- 더 지니어스 양면포커
- virtual destructor
- std::cout
- increment operator
- operator overloading
- c++ multi chatting room
- pointer to member data
- delete function
- base from member
- Today
- Total
I'm FanJae.
[C++] 표준 입출력 정리 본문
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다.
1. C vs C++ 표준 출력의 차이
#include <cstdio>
#include <iostream>
int main()
{
int n = 10;
double d = 3.4;
printf("%d, %f\n", n, d);
std::cout << n << ", " << d << std::endl;
// scanf("%d",&n);
// std::cin >> n;
}
① C는 printf 함수를 사용한 반면, C++은 std::cout이라는 객체를 사용한다. (객체가 무엇인지는 추후 다룰 예정)
② C는 %d, %f와 같은 포맷 지시어가 필요했으나, C++은 별도의 포맷 지시어를 사용하지 않는다.
③ 개행을 할때 '\n' 을 사용하는데, C++은 '\n' 또는 std::endl를 사용한다.
④ 입력을 받을 때는 C언어는 scanf 함수를 사용하는 반면, C++에서는 std::cin 객체를 사용한다.
⑤ C는 주소를 전달(&n) 하지만, C++은 주소가 아닌 n 그대로 전달한다.
⑥ 헤더 파일은 <iostream>을 사용하면 된다.
2. io maniuplator
- 입출력시의 다양한 출력(입력) 형태를 지정하는 것을 의미
- 조정자(조작자) 함수
#include <iostream>
#include <iomanip>
int main()
{
int n = 10;
std::cout << n << std::endl;
// "%x"
std::cout << std::hex << n << std::endl;
// "%d"
std::cout << std::dec << n << std::endl;
// %10d"
std::cout << std::setw(10) << n << std::endl;
std::cout << std::setw(10) << std::setfill('#') << n << std::endl;
std::cout << std::setw(10) << std::setfill('#') << std::left << n << std::endl;
}
① 조정자 함수를 사용시 유의할 점은 1회성 출력이 아닌 해당 이후 계속 입출력 형태가 변환됨에 유의해야 한다.
② 조정자 함수의 예시
std::dec | 변수값을 10진수로 출력 |
std::hex | 변수값을 16진수로 출력 |
std::setw | 문자열 출력시 개수 지정 |
std::setfill | 공백을 채울 문자 지정 |
std::left | 왼쪽 정렬(align) |
※ 이외에도 다양한 조정자 함수가 존재한다. 이는 cppreference.com에서도 확인이 가능하다.
③ std::cout의 단점과 이에 대한 대안
- C++ 초창기 부터 사용되던 표준 출력 객체이다. 허나, 이의 단점이 존재한다.
단점 1. 여러 개 변수 출력 시 코드가 복잡하다.
std::cout << "n = " << n << ", d = " << d << std::endl;
변수가 늘어나면, 상당히 복잡해질 수 있다.
단점 2. 성능이 느리다.
※ 이는 이유에 대해서는 추후 별도 포스트에서 다뤄보고자 한다.
2-1. std::print
- C++ 23 에서 추가되는 새로운 출력 함수
#include <iostream>
#include <print>
int main()
{
int n = 10;
double d = 3.4;
std::cout << "n = " << n << ", d = " << d << std::endl;
std::println("n = {}, d = {}", n, d);
std::println("{0}, {1}, {0}", n, d);
std::print("Hello ");
std::println("world");
}
※ 현 시점에서 std::print가 지원되지 않는 컴파일러가 다수 존재한다. 강의에서는 이에 따라 별도로 실습을 위한 print.h 헤더파일을 제공하고 있으나, 해당 예제는 std::namespace 안에 임의의 사용자 함수를 추가하여 작동하도록 만들어진 예제였다. 이는 강의에서도 절대 하면 안되는 행위임을 명시하였고, 실습을 위해 임시로 만든 헤더임을 명시하였으므로 따로 다루지 않는다.
'C++ > Basic' 카테고리의 다른 글
[C++] Function II (0) | 2024.08.08 |
---|---|
[C++] Function I (0) | 2024.08.07 |
[C++] C++ 에서 새롭게 추가된 Type & Variable (0) | 2024.08.06 |
[C++] namespace 정리 (0) | 2024.08.05 |
[C++] Visual Studio C++ 언어 표준 설정. (0) | 2024.08.05 |