static 4

static 멤버 함수가 static이 아닌 멤버 참조가 안되는 이유, static 멤버 함수에서 this를 사용할 수 없는 이유

this에 관해 몰랐거나 알아도 정확한 이유를 몰랐던 것들 1. 멤버 함수 내에 this가 묵시적으로 삽입된다 Class Go { int num; public: void SetNum(int a) { this->num = a; } }; 위와 같은 클래스가 있으면 컴파일러는 묵시적으로 Class Go { int num; public: void SetNum(Go* this, int a) { this->num = a; } } 이런식으로 this를 삽입한다 2. static 멤버 함수 내에서 this를 사용할 수 없는 이유 하지만 static 멤버 함수에 대해서는 this를 삽입하지 않아서 static 함수내에서 this를 사용할 수 없다. 왜 static 함수에 대해선 this를 삽입해주지 않는가? this는 ..

공부/C || C++ 2022.09.25

static 변수와 전역 변수와 비교

static 변수 전역 변수 메모리 생성 시점 프로그램 시작 프로그램 시작과 동시에 생성 및 초기화 메모리 소멸 시점 프로그램 종료 프로그램 종료 디폴트 초기값 0으로 자동 초기화 0으로 자동 초기화 접근 가능 범위 - 정적 지역 변수 : 중괄호 내부에서만 접근 - 정적 전역 변수 : 선언된 소스 파일 내부에서만 접근 가능 프로그램 전체에서 접근 가능 메모리 할당 공간 초기값이 있을 경우 : Data 초기값이 없을 경우 : BSS 초기값이 있을 경우 : Data 초기값이 없을 경우: BSS 초기화 횟수 딱 한번만 초기화 클래스 멤버의 경우 클래스 내부에서 초기화가 불가능해서 외부에서 해줘야 한다 Ex) ClassA::Statc_변수_이름 = 0; static 변수와 전역 변수의 초기화 시점에 관한 내용은..

공부/C || C++ 2022.09.23

C++ static variable, static member variable, static member function

C++에서는 static 키워드란 것이 있다. static의 의미는 정적이다는 것인데 이것이 변수에도 붙을 수도 있고, 함수에도 붙을 수 있다. 그리고 클래스 내에서 static은 또 다른 의미를 갖는다. static에 관한 내가 잊고 있었거나, 처음 알게된 사실들을 정리해보고자 한다. 우선 static변수의 특징부터 복습해보자. static변수는 전역 변수와 지역 변수로서의 특징을 모두 갖는다. 1. 전역 변수처럼 프로세스가 시작할 때(main 함수 시작 전에) 메모리가 할당되고 프로그램이 종료될 때 까지 메모리가 할당된 채로 남아있다. 지역 변수는 해당 블록이 끝나면 파괴되는 것과는 대비된다. 2. static 지역 변수가 블록 안에서 선언된 것이면 그 블록 밖에서는 사용이 불가능하다. 신기하게 메모..

공부/C || C++ 2021.07.23