카테고리 없음
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<>
- 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<>