#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之后也可以改变。