728x90 CPP Lvalue, Rvalue, &&(우측값 레퍼런스) 개념 Lvalue, Rvalue가 뭘까? 🔸 lvalue 저장할 장소가 있는 값, const가 붙은 값 ex) int a, const char b 🔸 rvalue 임의의 값 ex) 10, 'a' rvalue와 lvalue가 생긴 이유!? 원래 cpp98까지는 rvalue와 lvalue의 개념이 연산자 오른쪽에 있는 애, 연산자 왼쪽에 있는 애였다. 하지만 deep copy가 꼭 필요하지 않은 경우가 있다. class A { std::string a[100000000]; }; A a; B(a); B(makestr(a)); 위의 코드를 보면 class A는 굉장히 큰 string 배열을 저장하고 있다. A 클래스를 파라미터로 받는 B의 생성자를 만들 때, 우리는 항상 deep copy로 A 클래스의 string값.. 2022. 7. 27. CPP explicit 키워드 c++ 98에 처음 도입된 키워드! 암시적 형 변환의 특성 때문에 프로그래머가 예상치 못하는 형 변환이 일어남으로 인해 정말 어려운 버그가 생기는 걸 방지하기 위해 도입된 키워드. 도대체 형 변환으로 정말 어려운 버그가 어떻게 생기는 걸까? 밑의 예제를 보자. template struct Print { void operator() (T v) { cout 2022. 4. 27. CPP 4가지 타입 변환 연산자 (Casting) CPP에서는 안전한 casting을 보장하기 위해 casting을 도와주는 4가지 타입 변환 연산자가 있다. ( static_cast, dynamic_cast, const_cast, reinterpret_cast ) 1. static_cast - 실수와 정수, 열거형과 정수형, 실수와 실수 캐스팅 가능 - 컴파일 타임에 형 변환을 하기 때문에 컴파일 당시 오류를 확인할 수 있는 장점이 있다. static_cast (바꿀 대상) 밑과 같이 부모를 private, protected로 상속받을 경우에는 캐스팅이 되지 않음! class A { }; class B : A { }; int main() { A aa; B bb; // 둘 다 불가능 aa = bb; aa = static_cast(bb); } 부모를 pu.. 2022. 3. 20. :: Scope Operator(범위 지정 연산자)를 쓰는 3가지 상황 :: 이 기호는 Scope Operator(범위 지정 연산자)라고 한다. 범위 지정 연산자는 밑의 3가지 경우에서 쓸 수 있다. 1. namespace:: 2. className:: 3. :: namespace:: 어떤 namespace 안에 선언된 함수인지 지정하여 호출할 때 사용한다. namespace nameA{ void A(); } int main() { nameA::A(); } className:: 어떤 class 안에 선언된 멤버 함수인지 지정하여 호출할 때 사용한다. class A{ void a(); } int main() { A::a(); } :: global scope 함수나 변수를 지정하여 호출할 때 사용한다. int g_num; intmain(int argc, char **argv) .. 2022. 2. 15. CPP 순수 가상 함수(Pure Virtual Function), 추상 클래스(Abstact Class), 인터페이스(Interface) 순수 가상 함수(Pure Virtual Function)란? 순수 가상 함수는 구현이 없는 virtural 함수! virtual void function() = 0; vitural void function() = {} cpp의 가상 함수는 반드시 재정의할 필요 없다. 가상 함수가 뭔지 모른다면 아래 링크 클릭! 더보기 https://developer-eun-diary.tistory.com/52 CPP 가상 함수(Virtual Function) 가상 함수(virtual function)란? 부모 클래스(기본 클래스)에서 선언되어 자식 클래스(파생 클래스)에 의해 재정의되는 멤버 함수 가상 함수는 기본 클래스 내에 virtual 키워드로 함수를 선언 가상 함 developer-eun-diary.tistory.. 2022. 1. 18. CPP template template이란? 함수나 클래스를 다시 작성하지 않고도 여러 자료형으로 사용할 수 있도록 하게 만들어 놓은 틀 template는 cpp 기본 내장이어서 헤더를 딱히 써주지 않아도 된다. 그렇다면 template를 왜 쓸까? 밑에 코드를 보면 쉽게 이해 가능! int i_sum(int a, int b) { return a + b; } double d_sum(double a, double b) { return a + b; } 원래는 sum을 구현하기 위해, 매개변수의 자료형이 다를 때마다 함수를 새로 만들어줘야 했다. 이게 너무 번거로우니깐 자료형을 지정하지 않고 모든 자료형을 매개변수로 사용 가능한 함수를 만들기 위해 template 사용! typename으로 이름을 지정하고, 지정한 이름을 자료형처럼.. 2022. 1. 17. CPP Container와 Iterator Container cpp에서 처음 접한 개념 container가 뭘까? container는 말 그대로 저장소로라고 생각하면 쉽다. 같은 타입의 여러 객체를 저장하는 일종의 집합이다. 컨테이너는 클래스 템플릿이다. 컨테이너 변수를 선언할 때 컨테이너에 포함할 요소의 타입을 명시할 수 있다. 그렇다면 왜 배열을 안 쓰고 container를 쓸까? container 종류 중 하나인 "vector"를 예로 들어 생각해보자. int a[10]과 같이 선언해서 int 배열을 쓸 수 있는데, 굳이 왜 vector를 쓸까? int a[10]; vector b(10); vector에는 배열에 특화된 여러 유용한 함수들을 가지고 있다. 예로 뒤에 값을 추가할 수 있는 push_back이 있다. 많은 값을 저장하는 것에 특.. 2022. 1. 17. VSCode cpp 버전 설정하기 VSCode 설치 후 cpp를 쓰는데 아래 그림과 같이 백터 초기화가 안됨...!!!!! 아마 예상으로는 cpp 버전이 98로 되어있는거 같다..🥺 code -> 기본 설정(References) -> 설정(Settings)으로 들어간다 확장 -> c/c+로 들어간다 또는 cpp standard를 검색한다 cpp standard를 원하는 버전으로 바꿔주면 설정 끝! 2022. 1. 17. leetcode 701) Insert into a Binary Search Tree LV. Medium 🧐 https://leetcode.com/problems/insert-into-a-binary-search-tree/ Insert into a Binary Search Tree - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 You are given the root node of a binary search tree (BST) and a value to insert into the tree. Return the root node of .. 2022. 1. 12. cpp 멤버 이니셜라이저(Member Initializer) cpp에서는 멤버 이니셜라이저를 지원! 멤버 이니셜라이저가 뭘까? 멤버(member) = 클래스 내의 멤버 변수 이니셜라이저(initializer) = 초기화 멤버 이니셜라이저 = 클래스가 생성되면서 바로 멤버 변수를 초기화해주는 것 멤버 이니셜라이저가 왜 생겼을까!? 멤버 이니셜라이저가 있기 전에는 밑에 코드와 같이 생성자 안에서 변수를 초기화해줘야 했다 class A { private: int a; public: A(int _a) { a = _a; } } 이렇게 생성자를 통해서 멤버 변수를 초기화하는 것은 불편하기에 멤버 이니셜라이저(Member Initializer) 필요! 멤버 이니셜라이저의 장점 1. 초기화의 대상을 명확히 인식이 가능 2. 선언과 동시에 초기화가 이뤄지는 바이너리 코드가 생성되.. 2022. 1. 3. 이전 1 2 다음 728x90