본문 바로가기

예전/C, C++

(39)
[C++] reinterpret_cast reinterpret 의 뜻대로 캐스팅 하려는 것을 타겟의 타입으로 비트단위로 다시 재해석하는 casting 연산자이다. 다른 3개의 캐스팅 연산자가 처리하지 못한 일을 수행한다. reinterpret_cast는 관계가 없는 타입간의 변환을 한다. 하지만, const_cast의 기능인 상수성을 없애는 일은 하지 못한다. C연산자 만큼 casting이 자유롭지만 결과는 보장할 수 없다. [예제 1] #include using namespace std; int main(void) { int nValue = 100; char* pszTest = NULL; char* pszTest2 = NULL; pszTest = nValue;// 컴파일 에러 pszTest = static_cast(nValue);// 컴파일 ..
[C++] dynamic_cast dynamic casting 은 상속관계 내의 downcasting에 사용된다. [예제 1]#include using namespace std; class Animal { public: virtual void Go(void) { cout
[C++] const_cast const_cast 는 포인터 또는 참조의 const를 제거하는데 사용된다. [예제 1]#include using namespace std; int main(void) { const int* pConstTest = new int(10); int* pTest = const_cast(pConstTest);// pConstTest의 상수성이 제거되면서 pTest로 복사된다. *pTest = 200; cout
[C++] static_cast static_cast는 C 언어의 casting 처럼 만능은 아니지만, 여러 용도가 있다. 1. float-int, int-열거형 등 기본 데이터 타입간의 변환 int i;double d;i = static_cast(d); 2. 상속관계의 클래스 계층 간의 변환 3. void*를 다른 타입의 포인터로 변환 (참고) void*는 흔히 주소를 저장하는 용도로 쓰인다.int i = 400;void* pv = &i;int* pi = (int*)pv; 4. 서로 다른 타입의 포인터 사이에 타입 변환은 할 수 없다. 서로 다른 타입의 형변환의 경우 reinterpret_cast를 사용하는 것보다는 void*를 사용해 경유하는 방식을 추천한다. [예제 1]#include int main(void) { intnValu..
[C++] casting 연산자 이래서 공부 는 진작진작 해야하는 건데, http://www.iamcorean.net/128 정리가 잘되있어서 퍼왔다. 1. 문제 상황 C 컴파일러는 내맘대로 casting이 가능합니다. 혹자는 장점이라고 합니다만... 한편으로는 개발자의 실수를 그대로 용납한기 때문에 실은 아주 무책임한 컴파일러가 아닐수 없는 것이지요. 1: void main() 2: { 3: char *str="korea"; 4: int *pi; 5: char *pc; 6: pi=(int *)str; 7: pc=(char *)*pi; 8: printf("%s\n",pc); 9: getchar(); 10:} 위의 코드에서 문제점을 찾거나 동작을 예측하실 수 있으신가요? 오~ 대단하시네요. 제가 돌려보니 죽습니다. 이유는 무분별한 포인터..
[C언어] const volatile const - const 선언시 값을 할당할 수 있다. 선언이 끝난 const 변수는 값을 변경할 수 없다. volatile - 변수가 보통 procedure 이외에 변경될수 있는 경우에 사용한다.reload시 register나 cache가 아닌 memory 에서 값을 가져오라고 compiler에게 알려준다. volatile은 비휘발성의 라는 뜻이다.- 다른 process나 HW interrupt 에 의해 값이 변경될 수 있다. [예제 1] const vaolatile int nValue = 1; 현재 process 에 의해서는 변경될 수 없지만, 다른 process나 HW interrupt에 의해서는 값이 변경될 수 있다는 뜻이다. [참조] http://blog.naver.com/codeoptima/1..
extern extern 은 다른 파일에서 변수를 공유해서 쓰기위해 있는 키워드이다. 변수는 명시하되, 그것이 선언을 의미하는 것은 아니다. 즉, 메모리를 잡지않는다. 그 변수에 대한 메모리는 다른 파일에서 그 변수를 선언했을 때 잡힐 것이다. 참고로, extern 을 무분별하게 사용한다면,변수 이름의 충돌과, 공유 자원에 대한 잘못된 접근을 일으켜 프로그램 파일 또는 함수의 독립성을 떨어트린다.
template http://ifyouprogrammer.tistory.com/59 template에 대해 잘 정리되어 있다. 한번 읽어보기