程序猿c++(7) 常量const

  • A+
所属分类:C++

程序猿c++(7) 常量const

辨别const类型指针

程序猿c++(7) 常量const

第一种:指针P指向的对象是const

第二种:指针P指向的对象是const

第三种:指针P是const

注意:识别的要点是看const的位置,const在*后面,指针为const;const在*前面,指针指向的对象为const。

指针P指向的对象是const,意思为不能通过该指针来修改该对象的值,而不是该对象是const

字符串常量和const

程序猿c++(7) 常量const

这种写法会报错,程序会将hello world字符串当成字符串常量,该字符串在内存中将以常量的形式存在,不可更改,而使用char *s指向该字符串内存,便可以通过该指针去修改该字符串常量,因此,这句代码会warning。而后面对s[0]的修改将会直接导致程序崩溃,因为它修改了常量。可以采用char const *s来避免这种问题。

如果需要修改hello world,可以采用下面这种方式。该方式将hello world拷贝到s数组中,这时的s是可写变量。

程序猿c++(7) 常量const

函数传参和const

Void f(const int* x)

传给函数的是指针,但是在函数体内部不会对指针指向的变量做修改。

Void f(const int x)

传给函数的是变量,但是保证在函数体内部不会修改该变量的值

上面两个的区别是:第一种是传址方式,使用指针传参可以避免大量的数据复制;而第二种会在传参过程中进行大量的复制操作,因为这是传值方式。

程序猿c++(7) 常量const

1表示:将函数返回值赋给一个const变量,j不可修改

2表示:函数返回值为const,用这个const结果赋值给变量k,当然没问题,因为并没有试图去改变f4函数的返回结果,返回结果是const(不可更改)。

const对象

在使用C++语言开发中,如果我们希望某一个对象在定义之后不被错误的修改,我们可以将这个对象声明为const对象,这样这个对象的数据成员就不可以被更改。

可以使用以下两种方式定义const对象

  • const 类名 对象名;
  • 类名 const 对象名;

1)定义类对象时可以将其指定为const对象。定义后const对象不能再被修改;

2)const对象不能调用非const类型的成员函数。

const成员函数

任何不会修改数据成员(即函数中的变量)的函数都应该声明为const 类型。我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。

程序猿c++(7) 常量const

结果:输出“f() const”

这种写法没问题,两个f()函数并没有重复定义,因为其实最后编译器会给每个函数都添加一个this参数,上面两个函数就变成了

程序猿c++(7) 常量const

因为a是const,所以a.f()会选择调用带const的f()函数去调用。

const成员函数特点:

  • const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.
  • const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的.
  • const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.
  • 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的
Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!