• 과거에는 메모리 사용을 잘못하면 플랫폼에 문제가 발생 -> 이를 해결하기 위해 링 시스템(유저모드와 커널모드)과 가상메모리가 등장 -> 유저모드 단계에서 문제가 생겨도 플랫폼에 영향이 가지 않음
  • 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