본문 바로가기
반응형

프로그래밍 언어/C++63

[C++] static_cast 사용 방법 및 필요성 static_cast 필요성C 언어에서도 type casing 가능하지만논리적으로 위험한 캐스팅을 대부분 허용해서개발자 의도 인지 실수 인지 구분하기 어렵다.  [예제 코드]void* -> 다른 타입으로 캐스팅하는 것은위험하기 보다 필요한 캐스팅에 해당 하다.#include int main(){ // C Style int* p = (int*)malloc(sizeof(int) * 100); free(p); }  하지만int* -> 다른 타입(double*) 캐스팅 하는 것은4 Byte 할당한 곳에 8Byte 담는 것이기 때문에의도치 않은 결과를 야기할 수 있다.int main(){ int N = 100; double* p = (double*)&N; *p = 3.14;}static_cast논.. 2025. 1. 26.
[C++] 람다 표현식 lambda expression 람다 표현식 lambda expression• C++11 도입 • 익명의 함수(객체) 생성 • 함수 주소가 필요한 위치에 함수 구현 자체 표기 • auto 변수에 함수처럼 사용 • 특정 상황에서 일반 함수보다 빠르다. • 지역 변수 캡처 (capture local variable)[예제] 람다 표현식 적용 내림 차순 정렬할 때 sort 함수에 cmp 함수를 인자로 주었다.#include // 내림 차순bool cmp(int a, int b) { return a > b; } int main(){ int x[5] = { 1, 3, 5, 2, 4 }; std::sort(x, x + 5, cmp); for (auto v : x) { printf("%d ", v); // 5, 4, 3, 2, 1 }}  📌 .. 2025. 1. 25.
[C++] const_cast 필요성 및 활용 const_cast 필요성C언어 캐스팅으로 const 주소를 받아서값을 다르게 해볼 수 있다.#include int main(){ const int c = 100; int* p = (int*)&c; *p = 5; std::cout   엄격한 제한을 두지 않는 C Style Casting 이기 때문에개발자가 의도한 것인지 분명하지 않다.const_cast 활용C++에서는 const_cast 활용하여상수성을 제거할 수 있다.(static_cast와  reinterpret_cast 에서는 error 발생)int main(){ const int c = 100; int* p = const_cast(&c);}  C++에서는 casting 마다 역할이 있기 때문에필요하다면 각 역할에 맞게 중첩 캐스팅 해볼.. 2025. 1. 22.
[C++] reinterpret_cast 필요성 및 사용 방법 reinterpret_castreinterpret_casttype_id>(expression);→ reinterpret_cast바꿀 타입>(대상); • 메모리 재해석 • 서로 다른 타입 주소 캐스팅 • 정수 ↔ 주소 사이 캐스팅 C++에서는 주로 static_cast 활용하는데 다른 타입으로 변환하며 error 발생한다.#include int main(){ int harbang = 100; char* p = static_cast(&harbang); // error char& r = static_cast(harbang); // error}  아래와 같이 다른 타입으로 캐스팅 시 활용된다.#include int main(){ int harbang = 100; // int -> char ch.. 2025. 1. 21.
[C++] [STL] Vector 사용 방법 Vector 동적으로 원소를 추가하고 크기를 자동으로 늘려준다.C++ 표준 라이브러리(STL) → #include  - front() : 첫 번째 원소- back() : 마지막 원소- begin() : 첫번째 위치- end() : 마지막의 다음 위치- size() : 원소 개수- capacity() : 할당된 공간 크기- push_back(value) : vector 끝에 원소 삽입- pop_back() : 끝에 있는 원소 삭제- insert(index, value) : index 위치에 원소 삽입- erase(iter) : vector의 iter 위치의 원소 삭제- erase(iter1, iter 2) : [iter 1, iter 2) 앞 까지 원소 삭제 - resize(size), resize(siz.. 2025. 1. 20.
[C++] 레퍼런스 Reference 레퍼런스 (reference, 참조)이미 존재하는 변수에 추가적인 별칭 부여#include int main(){ int n = 10; int& r = n; r = 20; // 값 변경 std::cout   C 언어에서는 void swap(int* p1, int* p2) 와 같이call by pointer 방식을 사용했다면 C++에서는 void swap(int& r1, int& r2) 와 같이call by reference 형태가 가능하다.포인터 방식보다는 간결하게 코드를 작성할 수 있다. #include #include void swap(int* p1, int* p2){ int temp = *p1; *p1 = *p2; *p2 = temp;}void swap(int& r1, int& r2){ int te.. 2025. 1. 19.
[C++] Lambda expression 지역 변수 캡처 람다표현식 지역 변수 캡처capture local variable  점수 배열에서 70점 이상 filter 한다고 생각해보자.#include void foo(int n){ if (n >= 70) { printf("%d ", n); }}int main(){ int score[] = { 90, 30, 60, 70, 20, 10 }; std::for_each(score, score + 6, foo);}  람다 표현식으로 간결하게 표현할 수 있다.#include int main(){ int score[] = { 90, 30, 60, 70, 20, 10 }; std::for_each(score, score + 6, [](int n) { if (n >= 70) printf("%d ", n); });}  📌 [.. 2025. 1. 18.
[C++] 후위 반환 타입 (suffix return type) 후위 반환 타입 (suffix return type)• 함수 반환 타입을 뒤쪽에 적는 표기법• C++11 부터 등장• 「trailing return type」 라고도 한다.  [예제] 후위 반환 타입 (suffix return type)auto add(int a, int b) -> int{ return a + b;}int main(){ int ret = add(1,2);}  Q) 왜 새로운 표기법이 필요할까?기존 형식도 개발자에게 큰 이질감은 있지 않았다.그럼에도 후위 반환 타입이 필요한 경우는복잡한 함수 템플릿이나 람다 표현식에 유용하기 때문이다.  int, double 등 타입 추론할 수 있게 인자를 주면 문제 없지만인자가 서로 다른 타입으로 주어지는 경우 문제가 생긴다.#include temp.. 2025. 1. 15.
[C++] 함수 삭제 function delete 함수 삭제 (Delete Funciton)int GCD(int a, int b){ if (b == 0) { return a; } GCD(b, a % b);}int main(){ printf("%d\n", GCD(10, 4)); // 2 printf("%d\n", GCD(3.3, 4.4)); // 1}  최대 공약수를 구하는 함수 GCDC++에서는 GCD(3.3, 4.4); 와 같이 호출해도double 형이 int 형으로 형변환되기에 컴파일 문제는 없다.  경우에 따라서는허용하지 않는 Case에 대해 컴파일 에러 시키는 것이 필요할 수 있다.함수 내부에서 그런 Case를 처리하는 것은 지저분해지기 때문에다른 방법으로 아래와 같이 delete 키워드를 활용할 수 .. 2025. 1. 14.
[C++] STL capacity와 size 함수 차이 capacity > size 메모리 추가 작업이 빠르게 원소를 할당할 수 있다.capacity 개념이 왜 있는 것일까?  clear()는 메모리 공간을 제거하지 않고 size 값만 0으로 만든다resize(0)과 동일하다. Q) v1, v2 중에 어떤 것이 더 빠를까?#include #include using namespace std;int main(){ int count = 100000; vector v1; for (int i = 0; i v2; v2.reserve(count); for (int i = 0; i   비교하기에는 count 수치가 작긴 하지만..capacity 잡지 않고 push_back 하는 것과resize로 capacity 확보한 다음 push_back 하는 것인데메모리 공간이 여.. 2025. 1. 13.
반응형