美文网首页
C++的const复习

C++的const复习

作者: 盼旺 | 来源:发表于2019-12-13 13:23 被阅读0次

复习:如何访问静态成员

1) 类名::成员名
A::PrintNum();

2) 对象名.成员名
A a;
a.PrintNum();

3) 指针->成员名
A *p = new A();
p->PrintNum();

4) 引用.成员名
A a;
A & ref = a;
ref.PrintNum();

复习: const 修饰函数参数

像void Func(A a)这样声明的函数注定效率比较底。因为函数体内将产生A 类型的临时对象
用于复制参数a,而临时对象的构造、复制、析构过程都将消耗时间。为了提高效率,可以将函数声明改为
void Func(A &a),因为“引用传递”仅借用一下参数的别名而已,不需要产生临时对象。
但是函数void Func(A &a) 存在一个缺点:“引用传递”有可能改变参数a,这是我们不期望的。
解决这个问题很容易,加const修饰即可,因此函数最终成为void Func(const A &a)。
以此类推,是否应将void Func(int x) 改写为void Func(const int &x),以便提高效率?完全没有必要
因为内部数据类型的参数不存在构造、析构的过程,而复制也非常快,“值传递”和“引用传递”的效率几乎相当
对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递”,目的是提高效率。
例如将void Func(A a) 改为void Func(const A &a)。
对于内部数据类型的输入参数,不要将“值传递”的方式改为“const 引用传递”。否则既达不到提高效率的目的
又降低了函数的可理解性。例如void Func(int x) 不应该改为void Func(const int &x)。

复习:const 修饰成员函数(const的作用:说明其不会修改数据成员)

任何不会修改数据成员的函数都应该声明为const 类型。
如果在编写const 成员函数时,不慎修改了数据成员,或者调用了其它非const 成员函数,
编译器将指出错误,这无疑会提高程序的健壮性。
注意:
1.const 关键字不能与 static 关键字同时使用,因为 static 关键字修饰静态成员函数,
静态成员函数不含有 this 指针,即不能实例化,const 成员函数必须具体到某一实例。
2.const 关键字只能放在函数声明的尾部
3. const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.
4. const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的.
5. const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.
6. 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改
自然此时的const成员函数是可以修改它的。

复习:const的位置放置

前面使用const 表示返回值为const
后面加 const表示函数不可以修改class的成员 这里设计到this指针

const int getValue();
int getValue2() const;

复习:成员函数this指针

this指针:成员函数通过一个名为this的隐式形参来访问调用它的那个对象。
this由调用该成员函数的对象的地址初始化。
1 A t; 
2 t.getNum(); //等价于A ::getNum(&t),编译器负责把t的地址传递给getNum的隐式形参this

复习:const 修饰函数的返回值

1.const 修饰内置类型的返回值,修饰与不修饰返回值作用一样。
const int Cmf()
{
    return 1;
}

2.主要用于函数返回const引用
#include <string>
using namespace std;
//返回 const引用的函数
const string& SetValue_const(string & v){
    v = "123";
    return v;
} 
//返回普通引用函数
string& SetValue_not_const(string & v){
    v = "123";
    return v;
} 
int main(int argc,char *argv[]){
    string v;
    SetValue_const(v) = "456";//编译错误 返回引用为const引用,不允许修改 
    SetValue_not_const(v) = "456";//正常,返回的引用为普通引用,可以修改内容 
    return 0; 
}
引用是一个对象的别名,相当于 const 指针,其指向一经确定,就不能改变了。而 const 引用,
则相当于指向 const 变量的 const 指针,其指向和指向的内容均不允许改变。

相关文章

  • C++的const复习

    复习:如何访问静态成员 复习: const 修饰函数参数 复习:const 修饰成员函数(const的作用:说明其...

  • 关于const的那些事

    最近在通过 C++ Primer 这本书复习C++。在看到const这一节中,看到了很多容易混淆的几个点,因此记录...

  • C++常对象-常函数-常成员变量

    C++常对象-常函数-常成员变量 C++常对象 C++常对象, 就是使用const修饰的类实例!const A a...

  • 常应用问题

    C++ const 常指针:const int* ptr;const 修饰int*,ptr指向整形常量,ptr指向...

  • 网易云课堂(Boolan)C++ 第五周笔记

    CONST C++中只有const对象调用对象内非const函数会不成功,所以能加const的尽量加const,而...

  • C/C++ Const 小知识

    Const Const 特点 [描述] 在 C、C++、D 和 JavaScript 编程语言中,const是一个...

  • OpenCV2 图像叠加

    C++:void Mat::copyTo(OutputArraym)const C++:void Mat::cop...

  • 引用

    1、C++类型检查严格 ```c++ const int a = 10; int b = a; cont int ...

  • C++面经

    1. 语言基础 1.1 C++的四种类型转换: const_cast => 用于将const变量转为非const;...

  • 一、C++中的const、define

    C 语言中 在C语言中,const是个假语法,const 中的变量可以通过指针修改,例如: C++中 const ...

网友评论

      本文标题:C++的const复习

      本文链接:https://www.haomeiwen.com/subject/skjfnctx.html