에서 C와 C ++ 응용 프로그램에서 const를

에서 C와 C ++ 응용 프로그램에서 const를

CONST 정의 : CONST 정적 효과를 생성 변수를 정의 변경할 수 ANSI C에서 키워드이다. 프로그램의 안전성과 신뢰성을 향상시킬 수있는 어느 정도 const를 사용, CONST는 또한 파스칼, C ++, PHP5, BC의 다른 프로그래밍 언어에 표시 # 등등합니다.

C와 C에서 .CONST ++ 기본 사용법에

  • 이때 변수에 읽기 전용 권한이다 CONST는 INT의 CONST의 A = 10 일 때, 변수를 정의하기 위해 사용된다. 그런 다음 읽기 전용, 그것은 할당 할 수 없습니다 값을 둘 수 없습니다.
    이 때의 INT CONST의 A = 10에 해당 주 및 CONST A = 10에서 INT는 동일한 의미. CONST 변수를 수정하면, 초기화되지 않은 경우 다시 초기화 할 수 없습니다에, 초기화이 변수를 제공해야합니다.

    #include<iostream>
    using namespace std;
    const int a=10;
    int main(){
    int b=a; //不为左值 合法
    a=100 //为左值 非法

  • 일부 C 언어 컴파일러 어레이를 초기화 CONST 변수 (예 : VC ++ 6.0), 컴파일러는 불평한다. 이 "읽기 전용 변수"와 "상수"때문이다. 그러나 CONST는 의미가 확대되고 있기 때문 ++ 당신이 할 수있는, C 모릅니다.

   그러나, 번호 및 ENUM 타입 #define 매크로에 의해 정의 된 타입은 일정한 초기 트랜스 듀서 어레이를 정의 할 수있다.

II. CONST 및 #DEFINE 차이점

   기능에서 그들 중 2 명은 좋아,하지만 서로 다른있다.

  • 미리 컴파일 된 명령들을 정의 CONST 공통 변수가 정의된다. CONST 변수 정의되지만 #DEFINE 정의 상수이다. #DEFINE 매크로 배포 전 단계에서 정의되고, 읽기 전용 변수 CONST 정의 운영 단계 컴파일에 사용된다. 예를 들어, 단지 #DEFINE 실행 할 수 있습니다 사용하는 배열을 초기화합니다.

  • 컴파일러 상수 메모리의 읽기 전용 영역에 배치되어 있기 때문에, 물론, 그것을 수정할 수 없습니다. 은 "읽기 전용 변수는"값을 보유 할 새 메모리를 열 수 있지만, 컴파일러는 수정할 수 없습니다이 값이 정의된다. 특정 배열의 길이 ANSI C의 정의는 "정수", 그래서 에러한다.
    그러나 실제로 종래 매크로 변수 정의 CONST 더 편리 의한 이점에 부가하여 어레이의 길이는 사용하지. 따라서, CONST 프로그래밍 어디 CONST 경우의 사용을 가능하게 정의 할 수있다.

III. 하나의 차원으로 가리키는 const 포인터를 사용하여

  • CONST INT의 P1 = & A, 동등한에서 const INT P1 = & A;

  • INT의 CONST의 P1 = & A는, CONST 수정 // P1을 P1이 정당한 값은 방치한다 불법 채 P1 값
    우리가 CONST 수정할 때 볼 수
    * P1 값을 직접 변경할 수없는, P1, 그러나 변화를 가리 키도록 변경 될 수있다 값 (P1).

  • INT * CONST의 P2 = a 및 CONST가 // P2 수정, P2가 잘못된 값으로 남아있을 것이다은 P2 값 합법적으로 남겨
    이 경우 CONST이 P2를 수정, P2 직접 방향을 변경하지만, 변경할 수 없다
    (P2)의 값을 .

  • INT의 CONST의 CONST가 = & A P3 각각 수정 // CONST가 P3, P3이, 것이다 P3가 P2의 값은 불법적 인 다음으로 남아 P3에서 P3 값 및 방향뿐만 변경되는
    우리가 CONST 수정할 때 볼 수있는 , P1하지 직접 변경 (P1)의 값을, 값 (P1)의 변화를 가리 키도록 변경 될 수있다.

  요약 : CONST 뒤에 무엇인지, 무엇을하는 것은 수정할 수 없습니다. INT Eg.const P1 = & A 및 CONST의 INT 및 P2 = A *는 각각 P1 및 값이 점 P2로 변경 될 수 없다.

IV. 기능 CONST

  CONST 큰 역할을 수정할 수있는 매개 변수의 함수, 반환 값, 그리고 심지어 함수 정의 체이다. 그러나 출력 매개 변수가 const를 통한해야 할 경우 기능을 상실 있습니다.

  • 예를 들면 :

void StringCopy(char*strDestination, const char *strSource);

 strSource 입력 매개 변수이고, strDestination 출력 파라미터이다. 문 strSource의 내용을 수정할 수있는 신체의 시도의 기능은, 컴파일러는 오류를 지적한다면 추가 한 후 CONST는 strSource로 수정했습니다.

  • 배달이 CONST 규정을 충족하는 경우, 함수의 리턴 값이 동일한 타입 CONST 규정 포인터 할당 또는 모형을 사용할 수있다.

const int* func(void){ //函数声明
int* a = func(); //报错
int* c = const_cast<int*>(func()); //正确
const int* b = func(); }//正确

(3) const 멤버 함수
데이터 부재를 수정하지 않고 가능한 타입 선언 CONST만큼 기능한다. 쓰기 CONST 멤버 함수의 시간에, 실수로 데이터 멤버를 수정 또는 다른 비 const 멤버 함수를 호출하는 경우, 컴파일러는 오류를 지적 할 것이다.

추천

출처www.cnblogs.com/xqy-888/p/11515485.html