티스토리 뷰

728x90
반응형

 

https://www.youtube.com/channel/UCdGTtaI-ERLjzZNLuBj3X6A/featured

 

널널한 개발자 TV

널널한 개발자의 온라인 강의실 입니다.

www.youtube.com

요 분의 강의를 듣구서, 얻어놨던 꿀팁을 정리하는 포스팅 입니다.

 

1. C++ 참조연산자

C언어에 없었지만, 변수를 선언할 때 &(ampersand)를 붙인 형태로 선언할 수 있습니다.

void &temp;

(이미 있는 변수의 &변수명 을 통해서 주소를 보는것과는 다릅니다.)

 

C++에서 등장한 문법으로, 다른 변수를 '참조'하는 변수입니다. (다른 표현으로 alias라고 하더라구요)

 

이 참조연산다는 이 변수가 가리키는 위치가 변하기않는, 상수포인터 입니다

(가리키는 값이 상수가 아니라, 가리키는 것이 변하지 않는다는뜻)

 

아래 코드를 보면 이해가 빠릅니다.

//C style
int b = 10;
int fake_b = 22;
int* const a = &b;
//요러면 재할당이 발생해서 에러가 납니다
//a = &fake_b;


//C++ style
int &a = b;
//아래 경우로 재 할당이 되기 때문에 에러가 발생
//&a = fake_B

 

2. Object를 가지고 반복문

C++에서는 STL이나 Array를 가지고 반복문을 사용하는것이 가능합니다.

(Python의 "for i in list(a)" 를 생각하면 쉽습니다)

 

하지만 Python같은 경우 read만 가능하지, 반복문 내에서 i에 무엇을 대입 하더라도 list에 영향을 주지 않죠

 

하지만 C++에서는 Object로 부터 받은 값을 참조연산으로 받는다면?

 

temp에서 봅아온 값을 참조 하는 변수가 되고, 이는 해당 변수를 가리키는 포인터와 같은 역할을 합니다.

 

덕분에, 이 참조변수 i를 반복문 내에서 수정할 수가 있게 됩니다.(auto 변수로 바로 받을 수 있는건 덤)

int main()
{
    int temp[] = {1,5,9,7,8,6,5,2,1,6,5};
    //아래의 경우 read 만 가능
    for (auto i : temp){
    	printf("%d ", i);
    }
    
    //아래의 경우 read/write가 모두 가능함
    for (auto &i : temp){
    	i += 1;
        printf("%d ", i);
    }
    return -1;
}
/*
stdout result:
1 5 9 7 8 6 5 2 1 6 5

2 6 10 8 9 7 6 3 2 7 6
*/

 

3. 함수의 다중 정의

(override : 재정의, overload : 다중정의)

 

C에서는 동일한 이름을 갖는 함수를 여러개 정의할 수 없습니다

(ex. double add(double c, double d), int add(int c, int d) => 에러발생)

 

하지만 C++에서는 동일한 이름을 갖지만, 반환값이나 매개변수의 Type이 다를경우 다중으로 정의가 가능합니다.

 

이때, 컴파일이 진행되면서 함수명이 동일&Type이 다른 함수들은 함수명을 그대로 사용하는 것이 아니라 name mangling을 통해서 다른 이름을 갖게 합니다.

 

대신, 이런 방법은 나중에 .dll파일을 만들어 다른 프로그램에서 import할 때 에러를 발생시킬 수 있다고 합니다.

 

이 문제는 방지하는게 extern C { 블라블라 } 라고 scope를 지정해 준다면 c++ 컴파일러로 컴파일이 되더라도 name mangling을 하지 않습니다.


대신 요러면 동일한 이름에 타입이 다른 함수 여러개 정의 불가능

(extern C의 경우 CPython에서도 자주 볼 수가 있죠)

728x90
반응형

'C언어 잡기술 > C++' 카테고리의 다른 글

상속에 관해서  (0) 2022.05.19
Python과 C++의 클래스 생성자  (0) 2022.05.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함