c++ 的const类型

1、定义一个常量
const int name = value
2、定义一个常量指针或者定义一个指针指向一个常量
const char *pContent;
char* const pContent;
const char* const pContent;
前者是指针指向内容不能变化。第二句是指针本身不能变化。第三局是都不能变化。

class A
{
public:
    A(int param) {
        m_a = param;
    }
    int m_a;
};
void FuncChangeA(A* p) {
    p->m_a = 2;
}

int main()
{

    A * const pa = new A(3);
    FuncChangeA(pa);
    std::cout << pa->m_a << std::endl;//输出2,指针指向的内容可变。
    return 0;
}

3、类型转换
const的指针可以隐式转化为非const的。所以你如果函数的参数列表写作

void FuncChangeA(A* p)

则你赋给一个A* const pa是没有任何意义的。已经隐式转换为了普通的A* pa。内部你可以随意更改pa的指向。不过对函数外部不产生任何影响。

而指向const内容的指针不能隐式的转化为指向非const内容的指针。这种情况下,如果你将const A* pa赋给上述参数列表的程序,会产生参数列表错误的问题。

所有非const的量,都可以隐式的转换为const。你可以通过下面这种设计参数表的情况来避免自己犯错。
void f(const int i) { i=10;//error! }

4.const机制
这里写图片描述
用const和define定义的符号被称为符号常量。
全局的符号常量被存储在rdata区。显然被禁止更改。对于局部常量,编译器是在编译的时候进行检查来避免更改的,如果发现有更改的情况,编译器就会报错。

多说一句文字常量就是在语句中直接复制的。可以使数字,也可能是字符串。对于字符型文字常量,会存储到rdata区。而对于字符串型文字常量,可能会作为指令中的立即数进行编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值