공부 114

C 헷갈리는 char*와 char[] 그리고 string <-> char* 변환 방법

C++을 쓰면서는 string만 쓰겠지 생각하지만 은근히 char*나 char 배열을 쓰는 경우가 많다(나만 그런가). 쓰다보면 저 두개의 차이점을 잘 모르겠는데 이번 기회에 공부해서 정리해보려고 한다. 그리고 string char* 변환도 은근 자주 써야하는데 이거도 같이 정리해보자. 먼저 char*와 char array는 사이즈가 다르다 char*는 당연히 포인터니까 4byte이고, char array는 할당한 크기에 따라 달라질 것이다. 또 다른점은 char array는 인덱싱으로 해당 인덱스의 문자만 변경하는게 가능하다. int main() { char str[10] = "Hello"; str[3] = 'r'; } 하지만 char*는 똑같이 선언해도 .rodata section에 들어가는 녀석이라..

공부/C || C++ 2021.07.05

복사생성자란(copy constructor)?

1학년때 C++를 배울때 copy constructor를 처음 접했을땐 어려워서 열심히 공부해서 겨우겨우 이해해서 시험친 기억이 난다. 그때 기억으로는 다 이해했고 안까먹을거라 생각하고 넘어갔지만 막상 몇년이 지나니 까먹은 것 같아서 이 기회에 다시 정리한다. 1. 왜 써야 하는가? 우선 copy constructor라는걸 왜 써야하는지에 대한 의문은 쓰지 않았을 때 생기는 문제에 대해 생각해보면 쉽게 해결된다. 예를 들어 다음와 같은 코드가 있다고 하자 class person { int m_tAge; char* m_pName; public: person() { } person(int _age, char* _name) { m_tAge = _age; m_pName = new char[strlen(_name..

공부/C || C++ 2021.07.05

C++11 가변 인자 함수 템플릿(variadic template)

#define va_start(ap, v) ( (ap) = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) ) 사실 가변 인자 함수 템플릿이란 용어는 winapi 강의를 들으면서 처음 접해보는 단어였다. 그때는 이렇게 쓰면 되는구나~ 하고 넘어 갔는데 이번 기회에 좀 더 자세히 정리해보고자 한다. 사실 가변 인자 함수 템플릿 전에 가변 인자 함수라는 것을 알아보자. 가변 인자 함수는 말 그대로 함수의 인자 갯수가 1개부터 여러개가 될 수 있도록 정의 하는 개념을 의미한다. C에서 printf 함수를 예로 많이 든다. printf("%d\n", 3); printf("%d, %d\n", 3, 4); printf("%d, %d, %d\n", 3, 4, 5); printf("%d, %d, ..

공부/C || C++ 2021.07.04

C++ 11 - Rvalue reference

C++ 11에는 내가 몰랐던, 혹은 사용하는지도 몰랐던 여러가지 syntax들과 기능들이 있었다. 이번 기회에 정리해보면 좋을 것 같다. 이번 글에서는 Rvalue reference에 대해서 알아보자 먼저 Rvalue가 뭔지부터 알아보자. 이름만 보면 우측값인데 그런 의미 보다는 C++에서는 임시로 생성됐다가 바로 없어지는 값을 의미한다. Rvalue가 있으면 Lvalue도 있을텐데 Lvalue는 반대로 표현식 이후 scope내에서 다시 사용 가능한 값을 의미한다. 코드로 예를 들어보면 int a = 3 + 4; // 3+4는 rvalue int b = 10; // 10은 rvalue int sum = a+b; // a+b는 rvalue int *p = &a; // &a는 표현식이 종료되면 더 이상 참조..

공부/C || C++ 2021.07.03