All Development

C++) C와 C++ 의 차이점 Part 1

Todah 2024. 1. 4. 21:20
반응형

어떤 언어로 코딩을 하든 공통적으로 염두해야할 점은

사용자가 사용하기 편하게 코드를 짜야한다는 점이다.

 

 

첫번째 차이점, 변수와 인스턴스 (Instance)

 

•  사전적 의미는‘예시’ 혹은 ‘경우’

•  변수 대신 '인스턴스'라고 표현

•   int a; -> int형식에 대한 인스턴스 a

•  다양하게 사용되 는용어

•  프로세스 인스턴스

 

 

두번째 차이점, 변수 선언 및 정의

int main()
{
    int a = 10;
    int b(10);
    int c(a);

    std::cout << a << std::endl;
    std::cout << b << std::endl;
    std::cout << c << std::endl;
    return 0;
}

 

   C언어와 달리 C++에서는 변수의 초깃값을 소괄호 속에 기술.

   C언어의 선언 및 정의도 무방.

   auto 예약어의 의미는 자동변수 선언이 아닌 초깃값의 형식을 자동으로 따르도록 하는 것으로 변경. (C++11)

 

 

세번째 차이점, 전혀 다른 메모리 동적 할당

   변수는메모리를 사용하는 문법

   C++의 class는 C언어의 구조체와 유사

   메모리를 할당 해제하는 개념이 아니라 클래스에 대한 인스턴스(혹은 객체)를 생성하거나 삭제하는 방식

   new / delete 연산자로 메모리 할당 및 해제 (메모리 크기를 기술하지 않음.)

 

 

네번째 차이점, 포인터 대신 참조자 사용

void swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

 

   개념적인 측면에서 값을 변경 할 수 없고 반드시 초깃값을 기술해 선언하는 포인터와 유사

   인스턴스에 대한 참조자를 선언

   참조형은 반드시 선언과 동시에 초기화가 이루어져야함

 

 

- 임시 객체

int a(3), b(4), c; c = a + b

 

•   a + b 연산 시 두 int 인스턴스에 대한 덧셈 연산의 결과는 임시 인스턴스 (혹은 객체)

•   임시 객체는 c에 단순 대입 후 소멸

•   임시 객체는 이름을 갖지 않으며 보통 해당 구문 실행 후 자동 소멸

 

 

- r-value 참조

int &&rdata = a + 5; c = 3 + 4 + 5;

 

   형식 && 문법으로 선언하며 일반 참조자와 달리 &가 2회 연속 등장

   3 + 4 + 5 연산 시 3 + 4 연산의 임시결과를 이어지는 5와 덧셈하고 다시 임시결과 도출

int testFunc(int param)
{
	int result = param * 2;
	return result;
}

int main()
{
	int input = 0;

	std::cout << "Input number: ";
	std::cin >> input;

	int&& rData = (input + 5);
	std::cout << rData << std::endl;

	int&& result = testFunc(10);

	result += 10;
	std::cout << result << std::endl;

	return 0;
}

 

 

다섯번째 차이점, 범위 기반 for문

for(auto 요소변수 : 배열이름) 반복구문;

 

•   배열 요소의 개수 만큼 반복횟수가 자동으로 결정됨

•   배열 요소의 개수가 달라져도 반복문을 수정할 필요가 없음

•   단, 컴파일러가 반복횟수를 판단 할 수 있어야 사용가능

int main()
{
	int list[] = { 10, 20, 30, 40, 50 };

	for (int i = 0; i < 5; ++i)
		std::cout << list[i] << ' ';
	std::cout << std::endl;

	for (auto& element : list)
		element = 5;
	std::cout << std::endl;

	for (const auto& element : list)
		std::cout << element << ' ';
	std::cout << std::endl;

	return 0;
}

 

 

#눈여겨 본것들

1. C++의 메모리 동적할당

- C++의 클래스는 C언어의 구조체와 유사하며 메모리를 할당 해제하는 개념이 아니라 클래스에 대한 인스턴스를 생성하거나 삭제하는 방식이므로 Heap 영역에 할당된다는 점.

- new / delete 연산자로 메모리 할당 및 해제 (메모리 크기를 기술하지 않음.

 

2. 임시 객체와 r-value 참조

- 연산을 할때 실제로 인스턴스가 저장되지는 않고 결과값에 대입한 뒤에 사라진다는 점.

- 하지만 r-value 참조로 &&를 사용하게 된다면 함수가 종료되기 전까지는 유효하게 사용할 수 있다는 점.

 

 

#참조

https://www.inflearn.com/notes/54852

 

https://www.inflearn.com/notes/54852

 

www.inflearn.com

반응형

'All Development' 카테고리의 다른 글

C++) C++의 특징 Part 1  (1) 2024.01.08
C++) C와 C++ 의 차이점 Part 2  (1) 2024.01.05
Unity) Lerp 의 사용법  (0) 2023.10.28
Sparta_algorithm_course_05) velog  (1) 2022.07.29
Sparta_algorithm_course_04) velog  (1) 2022.07.23