- 과거에는 메모리 사용을 잘못하면 플랫폼에 문제가 발생 -> 이를 해결하기 위해 링 시스템(유저모드와 커널모드)과 가상메모리가 등장 -> 유저모드 단계에서 문제가 생겨도 플랫폼에 영향이 가지 않음
- C : 사용자가 스스로 물건을 잘 써야함
- C++ : 사용자의 이해도가 상대적으로 부족해도 되지만 물건을 잘 만들어야 함
비용 : C < C++
성능 : C > C++
유지보수 : C > C++
입출력
- std는 namespace, ::은 범위 지정 연산자, cout은 출력을 담당하는 객체(cin은 입력), <<은 연산자 함수
- cout객체에게 출력을 맡김
char name[10];
std::cout << "Hello World";
std::cin >> name;
자료형
- long long : 64비트 정수
- char16_t : 16비트 문자
- char32_t : 32비트 문자
- auto : 컴파일러가 초깃값의 형식에 맞춰 자동으로 형식을 규정하는 자료형
- decltype(expr) : expr과 동일한 자료형
메모리 동적 할당
- C의 malloc 대신 C++의 new 연산자가 등장 -> 동적할당으로 사용되지만 클래스에 사용되면 생성자를 호출
- 메모리 해제할때는 delete를 사용(배열은 delete[])
- malloc은 메모리를 확보하는 것이지만 new는 객체를 생성하는 것 -> malloc으로는 생성자가 호출되지 않음
int *nData = new int;
*nData = 5;
delete nData;
int *aList = new int[5];
delete[] aList;
참조자 &
- 선언 이후에 변경 불가능 -> 주소값을 상수화, NULL 값을 가질 수 없기 때문에 선언과 동시에 초기화해야 함
- 상수에는 참조자를 선언할 수 없음
- 겉으로 보기에는 포인터로 보이지 않음
- 덩치 큰 자료를 인자로 전달할 때 유용 -> 메모리 절약
- 호출자 코드만 봐서는 매개변수가 참조 형식이라는 것을 알 수 없음 -> C++에서는 함수의 원형을 확신해서는 안됨
- 상수형 참조 : 상수도 참조 가능(ex. const int &) -> 함수에서 인자로 상수도 받기 위함(ex. Add(10, 20))
int nData = 5;
// 아래 두 코드는 동일
int* const pnData = &nData;
int &pNewnData = nData;
void TestFucn(int *nParam)
{
}
int Add(const int &a, const int &b)
{
return a + b;
}
r-value 참조
- 임시객체(연산의 중간 결과)에 대한 참조 -> 연산의 중간값을 사용하기 위해 등장
int nData{5};
int &&nNewData = nData + 5; // r-value 참조
범위 기반 for문
int aList[5]{ 10, 20, 30, 40, 50 };
for (auto n : aList)
std::cout << n << std::endl; // n은 기본적으로 읽기만 가능
for (auto &n : aList)
std::cout << n++ << std::endl; // 참조자를 이용해 수정 가능
'💻 Computer Science > C & C++' 카테고리의 다른 글
[C] 함수 (0) | 2024.01.03 |
---|---|
[C] 배열 (0) | 2024.01.02 |
[C] 표준 입출력 도구 (0) | 2023.12.26 |
[C] 자료형 (0) | 2023.12.26 |
[C] C기본 (0) | 2023.12.21 |