c++基础知识之关键字

变量和基本类型

const限定符

它用来限定一个变量是只读的,即不可变的。
const和指针

常量指针

  • 不能通过指针修改指针所指向的变量的值
  • 但是指针可以用指向别的变量
int a =5;
const int *p=&a;//不能通过指针修改指向的变量的值
int b=10;
p=&b;//指针可以指向别的变量

指向常量的指针(指针常量)

如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号俩边,表示被指物和指针俩者都是常量。

  • 指针常量的值不能被修改,不能存一个新的地址,不能指向别的变量
  • 可以通过指针修改他所指向的变量的值。
int a= 5;
int *const p = &a;
*p = 20; //可变

int b = 10;
p=&b;//不fun可变

const和函数

const int func(const int a) const;

  • 修饰返回值 const int func();不能修改返回值。
  • 修饰函数参数 int func(const int a); 函数体内不能修改a的值。
  • 修饰类的成员函数 int function() const; 函数体内不能修改成员变量的值。

const对象

  • 不能修改成员变量值
  • 只能调用const成员函数,不能调用普通函数。

顶层const

  • 顶层const:指针本身是常量。
  • 底层const:指针所指的对象是一个常量。
int i = 0;
int *const p1 = &i;   //不能改变p1的值,这是个顶层const
const int ci = 42;    //不能改变ci的值,这是个顶层const
const int *p2 = &ci;  //允许改变p2的值,这是个底层const
const int *const p3 = p2; //靠右的const是顶层const,靠左的是底层const
const int &r = ci;    //用于声明引用的const都是底层const

const_cast

  • 用于修改类型的const属性,只能改变运算对象的底层const。
  • 变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改
void function(){
	const int a = 5;
    int *p;
    p = const_cast<int*>(&a);
    (*p)++;
    cout<<"a:"<<a<<endl;
    cout<<"p:"<<<<*p<<endl;
	
	const int b = 7;
	int &r = const_cast<int &>(b);
    r++;
    cout<<"b:"<<b<<endl;
}
输出:
	a:5
	p:6
	b:8

explicit

可以抑制内置类型隐式转换,所以在类的构造函数中,只需用于类内的单参数构造函数前面。由于无参数的构造函数和多参数的构造函数总是显示调用,这种情况在构造函数前加explicit无意义。

1class Demo
{
public:
    Demo(int i = 5)
    {
        m_a = i;
     }
private:
    int m_a;
};

int main()
{
    Demo d;
    //我们会发现,我们没有重载'='运算符,但是去可以把内置的int类型赋值给了对象A.
    d = 10;
    //实际上,10被隐式转换成了下面的形式,所以才能这样.
    //d = Demo  temp(10);
    return 0;
}

例2:

class Demo
{
public:
	//这里用explicit关键词来修饰类构造函数.
    explicit  Demo(int i = 5)
    {
        m_a = i;
     }
private:
    int m_a;
};

int main()
{
    Demo d;
    d = 10;//这样直接赋值,会被提示错误,因为explicit抑制隐式转换的进行
    return 0;
}

this指针

  • 每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
  • 友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值