4.const의 효과 (미완성)

4.1.const의 역할

(1) 상수를 정의

(2) 타입 검사 용이

상수의 CONST 형 안전 검사를 행할 수있다 CONST 정수 데이터 유형 변경되지만 매크로 상수는,이 단계가없는 경우, 예외 오류가 발생할 수있다.

(3) 무언가를 보호하기 위해 수정 될 수있다

우발적 인 변경을 방지합니다.

(4)를 쉽게 수정할 수있는 파라미터

(5) 과부하에 대한 참조를 제공

 

. 1  {
 2      공극 FUNC () {}
 . 3      // 과부하 FUNC ()는 상기 CONST 뒤에 괄호 비 멤버 함수를 사용하도록 허용되지 않는 
4.      공극 FUNC () CONST {}
 . 5 };

 

(6) 공간을 절약하기 위해

CONST 메모리 어드레스, 하나의 복사를 실행하는 과정을 소정의 상수를 정의하고, 메모리 매크로 정의 여러 사본.

(7)의 효율성을 개선하기 위해

컴파일러는 컴파일시 일반 const를 변수에 저장하지만, 심볼 테이블의 존재, 읽기 메모리 및 저장 작업을 할당하지 않고, 효율이 향상된다.

4.2.const 사용

공유 할 경우 (1) 기본적으로 CONST 객체는 통근 키워드를 사용하여 여러 파일에 파일을 효과적으로 할!

(2) 참조 CONST

. (1)      INT I = 5. ]
 2      // 큰 양에 결합하도록 허용 
. 3      CONST의  INT 및 R_1 = I]
 . 4      // 리터럴에 결합하도록 허용 
. 5      CONST의  INT 및 R_2 = 10 ]
 . 6      // 두 입력에 결합하도록 허용 참조 
. 7      CONST  더블 및 R_3 = I]
 . 8      // 연산 식 등호의 오른쪽 허용 
9.      CONST의  INT 및 r_4 = I가 + 5. ;
 10      CONST   및 r_5 = I가 + 5. ;

또 다른 유형에 무슨 일이 있었는지에 대한 결합 상수 참조?

다섯 번째 줄은 리터럴 상수에 결합 될 때, 예를 들어, 컴파일러가 수행된다 :

1 개      INT의 온도 = 10 ;
2      CONST의  INT 및 R_2 = 온도;

 

바인딩을 R_2 임시 객체 그래서 임시 객체에 저장된 모든 리터럴의 첫 번째. 이유는 C ++ 프라이머 5 코드의 다섯 번째 줄 위에서이 잘못 될 경우 수정 const를하지 않는 이유 P62-페이지를 설명, const를 규정 모호한 역할이 실제로 지적되고 이 간접 참조가 변경되지 않습니다 보여 객체 참조는 다음을 설명한다 :

 

. (1)      INT I = 5. ]
 2      // 큰 양에 결합하도록 허용 
. 3      CONST의  INT 및 R_1 = I]
 . 4      // 객체 및 R_1 변화의 결합 값이 허용 오차 
5.      & R_1 ++ ]
 . 6      // 적절히 사용 개체 자신의 작업 
. 7      I ++;

 

(3) 및 포인터 CONST

상수 포인터 :

 1 double p = 3.14;
 2     double p1 = 3.15;
 3     //允许将一个普通变量取地址赋值给一个指向常量的指针,反之,不允许一个将一个常量取地址赋值给一个普通指针
 4     double const *p_1 = &p;
 5     double const *p_2 = &p1;
 6     //正确,允许改变指针所指向的地址(改变指针本身)。
 7     p_1 = p_2;
 8     //错误,不允许改变指针所指地址存储的值
 9     *p_1 = 50;
10     cout << *p_1;
11     

 

常量指针:

    double pi = 3.14;
    double pi_1 = 3.16;
    //不能够把一个常量取地址赋值给一个指针常量,因为显然等号右侧应该是一个可变的值
    double * const pip = &pi;
    //允许通过指针修改所指向地址存储的值
    *pip = 3.15;
    //错误,不允许修改指针常量中指针本身
    pip = &pi_1;

 

如何阅读一个定义?

       在不带有数组的情况下,先读()的内容,然后从左往右读。比如说,double const *p_1 = &p;  先找到标识符p_1从左往右:*修饰,表明其首先为一个指针,然后是const修饰,说明这个指针所指的对象是一个常量,然后是基本类型符double,于是我们可以知道,这一条语句的定义理解为:我们定义了一个指向常量的指针p_1。

顶层const和底层const:

       顶层const:表示指针本身是个常量,定义可以延申。

       底层const:表示指针所指对象是一个常量,定义可以延申。

(4)const应用于函数

作为函数的形参:

1 //传递过来的参数在函数内不可以改变
2 void function(const int Var);
3 //参数指针所指内容为常量不可变
4 void function(const char* Var);
5 //参数指针本身为常量不可变
6 void function(char* const Var);
7 //引用参数在函数内不可以改变
8 void function(const int& Var); 

 

修饰函数返回值:

1 //函数返回值不能作为左值
2 const int func();
3 //把function()看作一个变量,那么指针所指地址的对应的内容不可改变
4 const int * function();
5 //把function1()看作一个变量,那么指针本身不可以改变
6 int * const function1();

 

函数的返回值不能作为左值这一点,在操作符重载中有所体现,比如说,避免了等号左边出现表达式的情况。const引用做形参和返回值在这里不再赘述,留下来自己思考!

(5)类成员中的const

修饰类的变量:

 1 class Test {
 2 public:
 3     //错误,const修饰的成员变量只能在初始化列表中赋初始值
 4     Test(int i)  {
 5         value = i;
 6 };
 7     //正确
 8     Test(int i) :value(i) {};
 9 private:
10     const int value;
11 };

 

修饰成员函数:

 

(6)

(7)

(8)

(9)

(10)

 

 

추천

출처www.cnblogs.com/Royzzzzz/p/10960656.html