c/c++语言开发共享C++中const关键字用法总结

看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧。 1) const与变量 在变量的定义前加上const修饰符即可完成const对象的创建。 const变量的 值不能改变 。 需要注意的是,const变量 必须初始化 ,因为一旦定义了const变量,其值便无法改变 …

看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧。

1) const与变量

在变量的定义前加上const修饰符即可完成const对象的创建。

const int val = 5;

const变量的值不能改变

val = 5;    //error:assignment of read-only variable 'val'

需要注意的是,const变量必须初始化,因为一旦定义了const变量,其值便无法改变,故必须有初始值。

const int val2; //error:uninitialized const 'val2'

默认状态下,const对象仅在文件内有效

//file1.cc const int val3 = 5; int val4 = 6;
//file2.cc //... extern const int val3; extern int val4; cout << val3 << endl; //error:undefined reference to 'val3' cout << val4 << endl; //ok

如果需要多个文件共享const变量,则只需在其声明和定义前加上关键字extern即可。

//file1.cc extern const int val3 = 5; int val4 = 6;
//file2.cc //... extern const int val3; extern int val4; cout << val3 << endl; //ok cout << val4 << endl; //ok

2) const和指针

const double pi = 3.14; //constant value double *ptr = &pi;  //error const double *cptr = &pi; //ok *cptr = 3.15; //error
double dval = 3.14; cptr = &dval; //ok *cptr = 3.15; //error
int errnumb = 0; int *const curerr = &errnumb;   //const pointer const double *const pip = &pi;

顶层const表示指针本身是个常量

底层const表示指针所指的对象是一个常量

3) const与函数

void fcn(const int i){//...} //fcn能够读取i,但不能修改i

函数设计时,对于较复杂的非内置类型应该尽量使用常量引用,值传递会造成不必要的浪费。

void func(string&); const string str;  func(str);//error func("something")//error

如上例,如果只是想使用字符串的值,则形参类型应为const string&,否则会限制所能接受形参的类型,并会给人一种误导,即函数可以修改它的实参的值。

4) const与类

使用const限定符修饰类的对象,则在该对象的整个生命周期中,其数据成员永远不会被更改。

const class_name object;

在类的函数成员声明中,如果在参数列表后面加上const,就说明这个函数不能修改对象的任何数据成员(mutable成员除外,其值总是能够被修改)。const实际上修饰隐式传入函数的this指针。

struct a {     void func() const { val = 0; } //error private:     int val; }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/602430.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐