c++에서 const 의 사용 에 대한 상세 한 설명
1.상수(1)const 수식 변 수 를 정의 하고 다음 과 같은 두 가지 정의 형식 은 본질 적 으로 같다.그 의 미 는 const 가 수식 하 는 유형 이 TYPE 인 변수 value 는 변 할 수 없다 는 것 이다.
TYPE const ValueName = value; const TYPE ValueName = value;
(2)const 를 외부 연결 로 바 꾸 고 전역 으로 확대 하 는 역할 을 합 니 다.컴 파일 할 때 메모 리 를 할당 하고 초기 화 하지 않 고 성명 으로 만 할 수 있 습 니 다.컴 파일 러 는 프로그램의 다른 곳 에서 정 의 를 내 렸 다 고 생각 합 니 다.
extend const int ValueName = value;
2.포인터 사용 CONST(1)포인터 자체 상수 불가 변 (char*) const pContent; const (char*) pContent;
(2)포인터 가 가리 키 는 내용 은 상수 불변 이다 const (char) *pContent; (char) const *pContent;
(3)둘 다 변 하지 않 는 다. const char* const pContent;
(4)그 중에서 차이 점 이 있 습 니 다.*번 호 를 따라 선 을 긋 습 니 다.만약 에 const 가*의 왼쪽 에 있 으 면 const 는 포인터 가 가리 키 는 변 수 를 수식 하 는 것 입 니 다.즉,포인터 가 상수 로 가리 키 는 것 입 니 다.만약 const 가*의 오른쪽 에 있다 면 const 는 포인터 자 체 를 수식 하 는 것 입 니 다.즉,포인터 자체 가 상수 입 니 다.
3.함수 에서 CONST 사용
(1)const 수식 함수 파라미터 a.전 달 된 매개 변 수 는 함수 내 에서 바 꿀 수 없습니다(의미 가 없습니다.Var 자체 가 형 삼 이기 때 문 입 니 다)
void function(const int Var);
b.매개 변수 포인터 가 가리 키 는 내용 은 상수 로 변 할 수 없습니다.
void function(const char* Var);
c.매개 변수 포인터 자체 가 상수 로 변 하지 않 습 니 다(의미 도 없습니다.char*Var 도 형 삼 이기 때 문 입 니 다)
void function(char* const Var);
d.매개 변 수 는 인용 입 니 다.효율 을 높이 고 수정 을 방지 하기 위해 서 입 니 다.인용 매개 변 수 를 수식 할 때:
void function(const Class& Var); //인용 매개 변 수 는 함수 내 에서 변경 할 수 없습니다.
void function(const TYPE& Var); //인용 매개 변 수 는 함수 내 에서 상수 로 변 할 수 없습니다.
2)const 수식 함수 반환 값 const 수식 함수 반환 값 은 실 용적 인 것 이 많 지 않 습 니 다.그 의 미 는 const 수식 일반 변수 와 지침 의 의미 와 대체적으로 같 습 니 다. a.const int fun 1()/이것 은 사실 의미 가 없습니다.매개 변수 반환 자체 가 할당 이기 때 문 입 니 다. b.const int*fun 2()//호출 시 const int*pValue=fun 2(); //우 리 는 fun 2()를 하나의 변수 로 볼 수 있다.즉,지침 내용 이 변 하지 않 는 다 는 것 이다. c.int* const fun3() //호출 시 int*const pValue=fun 2(); //우 리 는 fun 2()를 하나의 변수 로 볼 수 있다.즉,포인터 자체 가 변 할 수 없다 는 것 이다.
4.클래스 관련 CONST
(1)const 는 구성원 변수 const 수식 류 의 구성원 함 수 를 수식 합 니 다.구성원 상수 가 수정 되 지 않 고 초기 화 목록 에서 만 값 을 부여 할 수 있 습 니 다. class A { … const int nValue; //멤버 상수 수정 불가 … A(int x): nValue(x) { } ; //초기 화 목록 에 만 값 을 부여 할 수 있 습 니 다. }
(2)const 는 구성원 함수 const 수식 류 의 구성원 함 수 를 수식 합 니 다.이 구성원 함 수 는 클래스 의 비 const 구성원 함 수 를 수정 할 수 없습니다.일반적으로 함수 의 마지막 에 써 서 수식 한다. class A { … void function()const; //일반 구성원 함수,대상 의 구성원 변 수 를 바 꾸 지 않 습 니 다.
//클래스 의 비 const 구성원 함 수 를 호출 할 수 없습니다.}
(3)const 수식 클래스 대상/대상 포인터/대상 참조
•const 수식 류 대상 은 이 대상 이 상수 대상 이 며,그 중 어떤 구성원 도 수정 할 수 없습니다.대상 포인터 와 대상 인용 도 마찬가지다.const 수식 대상,이 대상 의 비 const 구성원 함수 가 호출 되 지 않 습 니 다.비 const 구성원 함수 가 구성원 변 수 를 수정 하려 는 시도 가 있 기 때 문 입 니 다.예 를 들 어
class AAA
{
void func1();
void func2() const;
}
const AAA aObj;
aObj.func1(); //×
aObj.func2(); //
const AAA* aObj = new AAA();
aObj-> func1(); //×
aObj-> func2(); //
5.Const 유형 을 비 Const 유형 으로 바 꾸 는 방법C++는 네 개의 변환 연산 자 를 제공 합 니 다:
•const case
const 사용cast 에서 비 Const 형식 변환 을 진행 합 니 다. 용법:constcast
•상수 포인터 가 비상 포인터 로 바 뀌 었 고 원래 의 대상 을 가리 키 고 있 습 니 다.상수 인용 은 비상 인용 으로 바 뀌 었 고 원래 의 대상 을 가리 키 고 있 습 니 다.상수 대상 이 비상 대상 으로 전환 되다.4567913)물론 우 리 는 아래 의 전통 적 인 방식 으로 대체 할 수 있다.
const int constant = 21;
const int* const_p = &constant;
int* modifier = const_cast<int*>(const_p);
*modifier = 7;
앞의 코드 에서 이미 보 았 듯 이 우 리 는 constant 을 수정 할 수 없 지만,우 리 는 modifier 를 다시 할당 할 수 있다.하지만 절차 세 계 는 정말 혼 란 스 러 웠 을 까?저희 가 정말 modifier 를 통 해 constatn 의 값 을 수 정 했 나 요?const 변 수 를 수정 하 는 데 이 터 는 정말 C+const 로 가 는 목적 입 니까?
만약 우리 가 결 과 를 출력 한다 면
const int constant = 21;
int* modifier = (int*)(&constant);
constant 은 원래 의 값 을 유지 합 니 다.그러나 그들 은 확실히 같은 주 소 를 가리 키 고 있 습 니 다.
cout << "constant: "<< constant <<endl;
cout << "const_p: "<< *const_p <<endl;
cout << "modifier: "<< *modifier <<endl;
/**
constant: 21
const_p: 7
modifier: 7
**/
이렇게 하면 const 의 값 을 다시 할당 할 수 있 지만 const 데 이 터 를 다시 할당 하지 마 십시오.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.