언어

[Basic C++] #27_상수 표현식, constexpr C++ 개발에서 까다로운 문법 혹은 특별한 의미를 갖는 부분에 대해 알아보겠습니다. "전문가를 위한 C"의 10 항목, "C++의 까다롭고 유별난 부분들"에 해당하는 내용입니다. Overview 개념 #0. 개념 1. 상수 표현식, constexpr? const int getArraySize1() { reutrn 32; } constexpr int getArraySize2() { return 32; } int main() { int myArray[getArraySize1()];// 에러!! int myArray2[getArraySize2()];// Ok!! 정상적으로 작동 합니다. return 0; } Details C++에서 "상수 표현식"이..
[Basic C++] #26_const 포인터, const 참조 C++ 개발에서 까다로운 문법 혹은 특별한 의미를 갖는 부분에 대해 알아보겠습니다. "전문가를 위한 C"의 10 항목, "C++의 까다롭고 유별난 부분들"에 해당하는 내용입니다. Overview 개념 코드 #0. 개념 1. const const double PI = 3.141592; PI = 3.14 // 컴파일 오류 Details "const" 키워드는 상수 값을 갖는변수의 선언에 사용됩니다. 따라서, 위 코드처럼 변수 값의 변경을 시도하면 컴파일 에러를 발생시킵니다. #1. 코드 1. const 포인터 예제 // 1. 포인터가 가리키는 데이터의 변경 방지 const int* ptr;// == int const* ptr; ptr = new..
[Basic C++] #25_우측 값 참조, 이동 시맨틱 C++ 개발에서 까다로운 문법 혹은 특별한 의미를 갖는 부분에 대해 알아보겠습니다. "전문가를 위한 C"의 10 항목, "C++의 까다롭고 유별난 부분들"에 해당하는 내용입니다. Overview 개념 코드 #0. 개념 1. 우측 값 참조?
#1. 개념 1. 우측 값int a;a = 5; // a는 좌항, 5는 우항좌항 혹은 좌측 값은 그 주소를 얻을 수 있는 이름을 가진 대상을 말합니다. 반대로, 우항 혹은 우측 값은 상수 값 혹은 임시 객체를 의미합니다.  #2. 코드// 1. 좌측값 참조형 파라미터void incr (int& val) { ++val; }int a = 10, b = 11;incr(a);incr(b);// 2. 우측값 참조형 파라미터void incr (int&& val) { ++val; }incr(5); // 상수값incr(a+b); // 임시 변수incr(std::Move(a)); // std::Move() : 좌항 변수 -> 우측값 참조로 변환C++에서 &&를 활용해 우측 값 참조가 가능합니다. 특히, move() ..
#1. 개념 1. 참조에 의한 전달(Call-by-reference)void swap (int& first, int& second){ int tmp = first; first = second; second = tmp;}참조형은 변수의 별명으로, 특정 변수가 할당 받은 메모리 영역을 참조하며, 역참조 연산을 자동으로 수행하는 포인터입니다. 따라서, '참조에 의한 전달'은 함수 인자 전달 방식 중 하나로 함수 매개변수를 '참조형'으로 선언하여 활용 가능합니다. 참조에 의한 전달은 원본 면수가 가리키는 메모리 영역을 참조형 매개 변수로 하여금 공유하도록 하여, 본문에서 발생하는 변경 작업들이 원본 변수에 영향을 줍니다. 2. '값에 의한 전달'의 단점1. 비효율성: 큰 객체 혹은 struct를..
[Basic C++] #21_가상 상속 C++ 개발에 사용되는 "가상 상속"개념에 대해 알아보겠습니다. Overview 개념 코드 #0. 개념 class Animal { public: virtual void eat() = 0; virtual void sleep() {cout
[Basic C++] #20_virtual 키워드, vtable 오버헤드 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. virtual 키워드 사용 이유 Java 언어는 모든 메소드를 무조건 virtual로 취급합니다. 이처럼, C++에서도 모든 메소드를 virtual로 취급하면 더 편리하지 않을까 생각합니다. 그럼에도 불구하고, "virtual" 키워드의 강조는 "vtable" 이용에 따른 오버헤드때문입니다. "virtual" 메서드, 즉 가상 멤버 함수 호출을 위해 "vtable"이 담고 있는 포인터를 역 참조하여 실행할 메서드의 위치를 찾아오는 부가적인 작업이 필요합니다. 물론, 날로 발전..
[Basic C++] #18_오버라이딩의 특수한 경우 여섯 번째, 일반 메서드의 오버라이딩 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. virtual의 내부 구현 "virtual" 키워드의 내부 구현에 대해서 알아보겠습니다. 컴파일러가 클래스의 정의 코드를 컴파일하면, 모든 멤버들이 들어 있는 바이너리 객체를 생성합니다. 이때, "virtual" 메서드가 아닌 경우, 호출 시 제어권의 전달이 컴파일 타임에 맞추어 직접 하드코딩됩니다. 반면에, "virtual" 메서드일 경우, 컴파일러는 "vtable"이라고 부르는 특별한 메모리 영역을 찾아보게 됩니다. "virtual" 메서드를 멤버로 갖고..
[Basic C++] #18_오버라이딩의 특수한 경우 여섯 번째, 일반 메소드의 오버라이딩 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. "virtual"을 사용하지 않을 경우 class Super { public: void go() {cout
[Basic C++] #17_오버라이딩의 특수한 경우 네 번째, 디폴트 인자 값 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 파생 클래스에서 '명시적'으로 복제 생성자를 정의할 경우 // 슈퍼 혹은 베이스 클래스 class Super { public: Super(); Super(const Super& _super); }; // 서브 혹은 파생 클래스 class Sub : public Super { public: Sub(); Sub(const Sub& _sub); }; // 파생 클래스의 복제 생성자 Sub::Sub(const Sub& _sub) : Super(_sub) {} 클래스 안에서 동..
Hardii2
'언어' 카테고리의 글 목록 (11 Page)