4.const эффект (незаконченный)

Роль 4.1.const

(1) определяют константы

(2) легкость проверки типов

Const постоянной модификации типа данных, но нет макро констант, проверки безопасности типа константы Const могут быть выполнены, отсутствие этого шага, есть может произойти ошибка исключение.

(3) может быть изменен, чтобы защитить что-то

Предотвращение случайного изменения.

(4) может быть легко изменен параметр

(5) обеспечивают ссылки для перегрузки

 

. 1  класс А {
 2      аннулируются FUNC () {};
 . 3      // Перегрузка FUNC (), не имеет права использовать функцию , не являющуюся членом в скобках после Const 
4.      Аннулируются FUNC () сопзЬ {};
 5 . };

 

(6), чтобы сэкономить место

Const определить константы, данные адреса памяти, процесс запуска только одной копии, и макроопределения нескольких копий в памяти.

(7) с целью повышения эффективности

Компилятор не выделяет память для обычной переменной сопзИ, но наличие таблицы символов, и память чтения и хранение операции во время компиляции, эффективность повышается.

4.2.const использование

(1) По умолчанию, константные объекты делать эффективно в файле, если вы хотите принять участие в нескольких файлах, используя ключевое слово Экстерн это!

(2) константная ссылка

. 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 праймер пятые причины ++ объяснила 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