본문 바로가기
반응형

분류 전체보기1300

[C++] 클래스 파일 분할 클래스 파일 분할일반 함수와 같이 클래스도멤버 함수를 선언과 구현으로 분리하는 것이 일반적이다. 템플릿과 같이반드시 헤더 파일에 멤버 함수 구현부도 같이 있어야 하는 경우도 있다.📌 헤더파일(.h) 만들어서 include 하기 [C/C++] [전처리기] 헤더파일(.h) 만들어서 include 하기헤더파일(.h) 만들어서 include 하기 헤더파일(.h)에는 함수 원형이나 클래스만 선언한다.내부 구현은 별도의 파일에서 구현한다. [Calc.h]int add(int A, int B);  [Calc.cpp]#include "Calc.h"int add(int a, int b)zoosso.tistory.com 하나의 파일에서 구현 [main.cpp]#include #include class Blog{ std:.. 2025. 1. 30.
[C++] constexpr function constexpr function란함수명 앞에 constexpr 키워드를 사용할 수 있다.이는 함수 인자값을 컴파일 시간에 결정할 수 있으면 컴파일 시간에 함수 실행!결정할 수 없다면 (일반 함수처럼) 실행 시간에 함수 실행하게 된다.  📌 [C++] constexpr 키워드 [C++] constexpr 키워드constexpr• 컴파일 시간에 결정되는 상수 값• C++11 에서 도입된 문법• 템플릿 인자로 사용 가능• 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용  const 키워드 비zoosso.tistory.com  [예제] constexpr function#include constexpr int square(int x, int y){ return x * y;}int .. 2025. 1. 29.
[C++] member initializer list member initializer list 필요성• 멤버 데이터로 상수나 참조가 있는 경우• 디폴트 생성자가 없는 타입이 멤버로 있는 경우  [예제] member initializer list 사용하지 않은 경우상수와 참조 변수는 반드시 초기화 되어야 한다.class Harbang{ const int c; int& r;public: Harbang(int c, int& r) { this->c = c; // error this->r = r; // error }};int main(){ int n = 5; Harbang h(5, n);} 생성자 블록 안에 값을 대입해주었지만초기화가 아니기 때문에 Build Error 발생멤버 초기화 리스트로 문제를 해결할 수 있다.  [예제] member initialize.. 2025. 1. 29.
[C] [전처리기] 매크로와 선행처리기 매크로와 선행처리기실행파일이 컴파일과 링크의 과정을 거치는데 컴파일 이전에 선행처리 과정을 거친다.▶ 선행처리 → 컴파일 → 오브젝트 파일 → 링크 → 실행 파일※ 컴파일 과정에 포함해서 표현하기도 한다.    한편으로는 컴파일러에 따라서 전처리 과정은 전처리기(preprocessor)라는    별도의 프로그램으로 수행하기도 한다.※ 소스코드가 선행 처리기를 거쳐도 별도의 파일이 생성되는 것은 아니다.    소스파일을 유지 하며, 선행처리 명령문대로 소스코드의 일부를 치환할 뿐이다.    - 컴파일: 오브젝트 파일 생성    - 링커: 실행파일 생성#include #define NAME "TEST"#define PRINT_ADDR puts("주소: xxx-xxx");#define SQUARE(X) X*X.. 2025. 1. 28.
[C++] lower_bound, upper_bound 사용해보기 lower_bound, upper_bound▶ lower_bound(start, end, val) =  [start, end) 범위에서 val 이상인 첫 번째 원소 위치 반환▶ upper_bound(start, end, val) =  [start, end) 범위에서 val 을 초과하는 첫번째 원소 위치 반환Harbang lower_bound(Harbang first, Harbang last, const T& value);Harbang lower_bound(Harbang first, Harbang last, const T& value, Compare comp);Harbang upper_bound(Harbang first, Harbang last, const T& value);Harbang upper_bou.. 2025. 1. 27.
[C++] rvalue reference rvalue referencervalue 등호(=) 오른쪽에만 올 수 있는 것lvalue 등호(=) 오른쪽/왼쪽 모두 올 수 있는 것  [예제] lvalue와 rvalueint main(){ int v = 0; v = 100; // ok (v = lavlue) 20 = v; // error (20 = rvalue)}[예제] lvalue reference• lvalue만 가리킬 수 있다.• rvalue에 사용하면 errorint main(){ int v = 0; int& r1 = v; // ok int& r2 = 100; // error}  [예제] const lvalue refenece• lvalue와 rvalue 모두 가리킬 수 있다.int main(){ int v = 0; //.. 2025. 1. 27.
[C++] constexpr 키워드 constexpr• 컴파일 시간에 결정되는 상수 값• C++11 에서 도입된 문법• 템플릿 인자로 사용 가능• 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용  const 키워드 비교값 초기화 이후 변경할 수 없다는 것에서는 동일하다.#include void main(){ const int x = 5; x = 3; // error constexpr int y = 6; y = 2; // error}  Q) 그렇다면 어떤 차이가 있을까?상수값은 컴파일, 실행 시점 등 정해지는 시기가 다를 수 있다.#include void main(){ const int x = 5; int arr1[x]; // ok int temp = 3; const .. 2025. 1. 26.
[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.
반응형