c++中的常量,常对象,常引用,常指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37154839/article/details/84864312

 所谓常量是指在程序运行中值始终不可改变的量。而常对象是指他的数据成员在对象的整个生存周期内不能改变。这也意味着不能用常对象去调用普通的成员函数,因为有可能会改变常对象的数据成员,所以便有了常成员函数。如果一个对象被声明为常对象,他只能调用常成员函数。普通对象也能调用常成员函数,但是会被视为常对象,即不能改变数据成员的值。

  c++中用引用作形参来对实参进行操作而提高效率,但是有时不希望对实参进行更改或者传递的是常对象,这时就应该采用常引用的方式。

 常引用声明方式:const  类型标识符  &引用名 = 目标变量名;

  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 所以不存在引用常量的说法

  用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

#include<iostream>
using namespace std;
int main()
{
    int a=10,b=12;
    int const &p=a;//const int &p=a;常量引用,引用是个常量,一旦引用被初始化为一个对象,就不能被指向到另一个对象。
   // p=b;//报错assignment of read-only reference 'p',p为只读变量
    //p=a;//也报错,assignment of read-only reference 'p',反正不能有引用指向的语句
    a=13;
    cout<<p<<endl;//13;值可以改变
    //p=13;
    //cout<<p<<endl;//报错assignment of read-only reference 'p',不能通过p改变值
    return 0;
}

  常量指针又叫常指针,指的是声明的一个指针变量是一个常量,不允许发生改变,也就是该指针不能指向其他地址。但是该指针所指的对象是可以发生改变的。

#include<iostream>
using namespace std;
int main()
{
    int a=10,b=12;
    int *const p=&a;//const和int的位置不能互换
    //常量指针,该指针是个常量,顾名思义指针不能指向其他的地址,但指针所指向的地址中的内容可以改变
    a=13;
    cout<<*p<<endl;//13
    *p=15;
    cout<<*p<<endl;//15
  //  p=&b;//报错指针不能指向其他的地址
    //cout<<*p<<endl;
    return 0;
}

  指向常量的指针,也叫指针常量,顾名思义,该指针变量指向的是一个常量,指针所指的常量不允许改变,但是该指针可以指向其他地址。

#include<iostream>
using namespace std;
int main()
{
    int a=10,b=12;
    int const *p=&a;//等同于const int *p=&a;const和int位置可以互换;
    //指针常量,指向常量的指针,所指地址的内容不能通过指针改变,指针可以改变所指的地址
    a=13;
    cout<<*p<<endl;//13
    a=b;
    cout<<*p<<endl;//12
    //*p=14;//报错不能通过指针改变值,但可以通过其他方式改变a的值
   //cout<<*p<<endl;
    p=&b;//12
    cout<<*p<<endl;
    return 0;
}
#include<iostream>
using namespace std;
int main()
{

    int const a=13;
    int *p=a;//报错 invalid conversion from 'int' to 'int*' [-fpermissive]|
    //因为它消除了a的const属性
    return 0;
}
通过*的位置来记忆
如int * const a = &b; 后面是a,则说明a不能修改!为常量指针
int const * a = &b;后面是*a则说明*a不可被修改!为指针常量

猜你喜欢

转载自blog.csdn.net/m0_37154839/article/details/84864312