일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c
- 프로그래밍
- 다이렉트X
- DirectX12
- C언어
- vertex
- 다중표본화
- 게임수학
- C++
- GPU
- 동기화
- View
- 세팅
- Direct3D
- 코딩
- DirectXTK
- Input Assembler
- Direct3D Init
- Direct Init
- UE4
- RenderTargetView
- engine
- 다이렉트X 튜토리얼
- CPU
- 전처리문
- DESC
- swapchain
- DirectX
- CommandList
- 다이렉트 초기화
- Today
- Total
비타Cpp
const 위치에 따른 의미들 본문
const가 걸린 위치에서는 값이 변경이 안되게 하는 상수화하는 명령어입니다.
const는 다양한 위치에 붙을수 있는데,
변수에서는
[const] [dataType] [const] [Pointer] [const] [VariableName]
[const] [자료형] [const] [포인터] [const] [변수명]
멤버 함수에서는
[const] [dataType] [const] [Pointer] [Function(Parameters)] [const] {Function Codes}
[const] [자료형] [함수명([const]매개변수)] [const] {함수 코드}
이런 식으로 붙을수 있다.
예를 들어 설명하면
1. const int ** num;
2. int * const * num;
3. int ** const num;
1번 선언문은
(const int) ** num; 이렇게 묶입니다.
const int의 이중 포인터이므로,
num과 *num 의 값은 주소 값이죠.
이 주소 값들은 const가 걸리지 않아 얼마든지 바꿀 수 있지만,
**num은 이중 포인터를 타고 들어가 const int의 값에 도달합니다.
이는 상수화 되어 바꿀 수 없죠.
2번 선언문은
(int * const) * num; 이렇게 묶입니다.
이번에는 int* 를 상수화 한 것입니다.
num과 **num은 바꿀 수있지만 *num의 값은 바꿀수 없게 됩니다.
3번 선언문은
(int **) const num; 으로 묶입니다.
int** 자체를 상수로 만들었으니 이중 포인터 값은 변경이 안되는 것이겠죠.
**num과 *num은 변경이 가능하지만 num은 변경이 불가능 해 집니다.
멤버 함수에서는
class A
{
public:
int* m_nData;
const int* Func(int* n)
{
m_nData = n;
return (const int*)m_nData;// ->return타입이 const가 아니면 에러
}
};
class A
{
public:
int* m_nData;
int* Func(const int* n)
{
*n = 2000;//n을 변경하려하면 에러
return (int*)n;
}
};
class A
{
public:
int* m_nData;
int* Func(int* n) const
{
m_nData = n; //멤버변수를 변경하려고 하면 에러
Func2();
Func3(); //const객체는 const멤버함수가 아닌 다른 함수 호출 시 에러
return m_nData;
}
int* Func2() const
{
}
int* Func3()
{
}
};
'C,C++' 카테고리의 다른 글
변수의 주소값과 포인터 자료형 (0) | 2020.05.17 |
---|---|
R-value와 L-value (0) | 2020.05.17 |
조건문 switch (0) | 2020.04.22 |
조건문 if, if ~ else if ~ else 가위 바위 보 게임 (0) | 2020.04.21 |
조건문 if, if ~ else if ~ else (0) | 2019.12.02 |