카테고리 없음

C/C++ 의 const, static, explicit, casting

써드아이 2008. 2. 19. 00:29
const

    - const type var = value
    
    - const type-of-pointer var = value
    
    - type-of-pointer const var = &var
    
    - const std::container<type>::iterator like typype-of-pointer const var
    
    - std::container<type>::const_iterator like const type-of-pointer var
    
     
    - const 멤버 변수의 초기화 (특히나 const 멤버 변수 or ref 변수가 존재할 시 생성자 필수!!)
         claass_constructor() : const_var( value )
         {
         }
         
    - const member 함수 (함수 선언문 뒤에 const를 붙인다)
         1. 이 함수를 통해서 멤버 변수의 값이 변경되는 것을 허용하지 않는다.
         2. 상수화 되지 않은 함수의 호출도 허용하지 않는다.
         3. 멤버 벼누의 포인터를 리턴하는 것도 허용하지 않는다.
         
         (하지만 linux에서 gcc를 사용했을 경우 위 세가지가 잘 동작했다. 왜 그럴까?)
         
    - 함수의 const 인자
     
    - 함수의 const 반환값
     
    - const와 함수 overloading

    - const 객체
        1. const member 함수만 호출 가능
        2. 다른 모든 경우(member 변수, member변수를 조작하지 않는 일반 member함수)는
           접근 불가능


static

    - main함수가 호출되기도 전에 생성되어 단지 하나만 생성되에 초기회 된다.(함수나 변수에 상관 없이)
    - 따라서 객체가 생성되지 않더라도 접근 가능하다.
    - scope rule(?)에 따른 접근 권한만 부여된 것이다.

explicit

    - 묵시적인 변환을 허용하지 않는다.
    
    class Stack
    {
        explicit Stack( int size );
        ....
    }
    
    Stack s;
    
    s = 40;            // compile error!!
    
    
casting operator
    
    const_cast<>
        - const 속성이나 volatile 속성을 제거할 때 사용된다.
        
    static_cast<>
        - 일반적인 type casting
        - A -> B 의 암시적(implicit) 형변한이 가능하다면
          static_cast<>를 이용해서 B -> A의 형 변환이 가능하다.
          
    dynamic_cast<>
        - 상속 관계에 있는 클래스의 downcasting
        - 부모 클래스 타입의 객체를 자식 클래스 타입으로 형 변환
        - 실행시 변환 과정을 거치기 때문에 부하가 많이 걸린다.
                
    reinterpret_cast<>