const学习

#include "stdafx.h"
#include<vector>
#include<iostream>

int main()
{
	char a[] = { 'a', 'b' };
    // 同时定义两个指针,都指向字符数组a的首地址
    char* const cpp = a;	// const修饰指针,表示指针不可以修改,指针指向的内容可以修改
    const char * cp = a;	// const修饰指针指向的内容,指针可以修改,指针指向的内容不可以改变

    char b = *cpp = 'd';	// b = 'd' 修改了cpp指向的内容,将字符a改成字符d
    char c = *++cp;		// c = 'b' 修改了cp指针,向后移动一位,由原来指向字符a变成了指向字符b

    std::cout << *cpp;

    // 解除cp的const属性得到p
    char *p = const_cast<char*> (cp);

    std::vector<std::string> vecStr;
    for (int i = 0; i < 10; ++i)
    {
        vecStr.insert(vecStr.end(),std::to_string(i));
    }
    // const_iterator 指针可以改,指向内容不可以改变
    std::vector<std::string>::const_iterator c_iter = vecStr.begin();
    c_iter += 5;
    std::cout << *c_iter << std::endl;

    const auto iter = vecStr.begin();
    *iter = "wsl";
    // iter 指向内容可以改,指针不可以改
    //iter++;
}

另外,const在修饰类成员函数时,会出现在各种位置

1. const int Test(int a, int b);

2.int const Test(int a, int b);

3.int Test(int a, int b) const;

这三种情况中,第一种与第二种const修饰的是返回值,是一样的。第三种 相当于 int Test(const ClassName *this, int a, int b);

这里需要注意的是在定义的类成员函数里,其实是省略了一个this参数的,因此const会出现在这两个位置,用来修饰this指针指向的内存空间。

另外,当使用第二种const后,类内成员变量都是不可变的,为了改变这种属性,可以在成员变量前加 mutable使其在加入第二种const之后也可以改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值