c++ 类型修饰符之const

2023-01-13 0 866

const用以润色内建类别表达式,自订第一类,核心成员表达式,codice,auth。

用以选定两个语法束缚,C++会强制性实行那个束缚,说C++某值维持维持不变。

1 润色一般类别的表达式

const int a = 7; int b = a; // 恰当 a = 8; // 严重错误,无法发生改变

特别注意:即使自变量在定之后就无法被修正,因此表述时要调用:

const int i; // 严重错误,i未调用

2 润色操作符表达式

const 润色操作符表达式有下列四种情形。

A: const 润色操作符对准的文本,则文本为不容表达式。B: const 润色操作符,则操作符为不容表达式。C: const 润色操作符和操作符对准的文本,则操作符和操作符对准的文本都为不容表达式。

对A

const int *p = 8; //8 不容以发生改变,这句话是错的,无法表达式 int a = 1; const int *p = &a; // p对准的文本不容以发生改变 a = 2; // 恰当,虽然按道理来说p对准的文本不容以发生改变,但是a能发生改变,也就发生改变了p对准的文本*p = 2; // 严重错误,p对准的文本不容以发生改变

对B

int a = 8; int* const p = &a; *p = 9; // 恰当 int b = 7; p = &b; // 严重错误

对C

int a = 1; const int * const p = &a; *p = 9; // 严重错误,即使对准的文本不容以发生改变 int b = 2; p = &b; // 严重错误,即使p操作符本身的文本不容以发生改变

3 润色参数传递

润色参数能分为四种情形

A:值传递的 const 润色传递,一般这种情形不需要 const 润色,即使表达式会自动产生临时表达式复制实参值。

void Cpf(const int a) { cout<<a; // ++a; 是严重错误的,a 无法被发生改变 } int main(void) { Cpf(8); system(“pause”); return 0; }

B:当 const 参数为操作符时,这种情形与上面润色操作符的情形一样,分四种情形

void Cpf(int *const a) { cout<<*a<<” “; *a = 9; // 恰当,即使const这时限定了本身不容以发生改变 a++; // 严重错误,即使a操作符本身不容以发生改变,这时候能防止操作符被意外纂改。 } int main(void) { int a = 8; Cpf(&a); cout<<a; // a 为 9 system(“pause”); return 0; }

C:自订类别的参数传递,需要临时第一类复制参数,对临时第一类的构造,需要调用构造表达式,比较浪费时间,因此我们采取 const 外加引用传递的方法。

并且对一般的 int、double 等内建类别,我们不采用引用的传递方式。

#include<iostream>using namespace std; class Test { public: Test(){} Test(int _m):_cm(_m){} int get_cm()const { return _cm; } private: int _cm; }; void Cmf(const Test& _tt) { cout<<_tt.get_cm(); } int main(void) { Test t(8); Cmf(t); system(“pause”); return 0; }

4 润色codice

分四种情形

A:const 润色内建类别的codice,润色与不润色codice作用一样。

#include<iostream>using namespace std; const int Cmf() { return 1; } int Cpf() { return 0; } int main(void) { int _m = Cmf(); int _n = Cpf(); cout<<_m<<” “<<_n; system(“pause”); return 0; }

B: const 修饰返回的操作符或者引用,是否返回两个对准 const 的操作符,取决于我们想让用户干什么。

C: const 润色自订类别的作为codice,此时返回的值无法作为左值使用,既无法被表达式,也无法被修正。

5 润色类核心成员表达式

1 类的核心成员表达式后面加 const,表明那个表达式不会对那个类第一类的数据核心成员(准确地说是非静态数据核心成员)作任何发生改变。有 const 润色的核心成员表达式(指 const 放在auth表的后面,而不是在表达式前面或者参数表内),只能读取数据核心成员,无法发生改变数据核心成员;没有 const 润色的核心成员表达式,对数据核心成员则是可读可写的。

2 自变量(即 const)第一类能调用 const 核心成员表达式,而无法调用非const润色的表达式.

3 两个核心成员表达式如果只是自变量性不同,是能被重载的

class A { public: void f() { cout<<“non const”<<endl; } void f() const { cout<<” const”<<endl; } };

4 const 关键字无法与 static 关键字同时使用,即使 static 关键字润色静态核心成员表达式,静态核心成员表达式不含有 this 操作符,即无法实例化,const 核心成员表达式要具体到某一实例。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务