c++ 的const类型

原创 2016年08月28日 19:59:59

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区。而对于字符串型文字常量,可能会作为指令中的立即数进行编码。

C++类型转换详解--const_cast

一. 函数描述: const_cast ( expression ) 主要是用来去掉const属性,当然也可以加上const属性。主要是用前者,后者很少用。 去掉const属性:const_c...
  • lwbeyond
  • lwbeyond
  • 2011年02月28日 15:49
  • 26345

【C++数据类型】const 引用的几点用法

一、作为函数形参 const引用作为函数形参,可以实现传入右值和常左值实参,我们通过和普通引用作为形参进行对比来说明这一点。 首先,如下代码,将普通引用作为函数print的形参,传入右值和常左值引用,...

C++中的const关键字系列——常类型与常指针之间的纠缠

说起const这个关键字,想必大家都不会陌生了。因为在高级编程语言的范畴内,几乎都有这么一个关键字。 因为最近的一段时间内在类的设计与实现的时候,有某些需求是要用到const修饰符来修饰那些变量或是...
  • ZLhy_
  • ZLhy_
  • 2012年12月26日 18:44
  • 1655

const类型整理总结--C++

1什么是const? (const类型)常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(但可以偷梁换柱进行更新) 2为什么引入const? const 推出...
  • lomper
  • lomper
  • 2013年12月09日 15:40
  • 473

【C++】强制类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit)

强制类型转换关闭或挂起了正常的类型检查,要慎用: (1):static_cast: static_cast用于(非多态)相关类型的转换(静态转换),即可用于编译器隐式执行的任何类型转换 int i...
  • ZDF0414
  • ZDF0414
  • 2015年10月15日 19:18
  • 360

学习: c++类型转换reinterpret_cast、 const_cast、static_cast、dynamic_cast

3.1 static_cast 用法:static_cast ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性...

标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和 const_cast

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, d...

标准c++的类型转换符之间的区别(static_cast,dynamic_cast,const_cast,reinterpret_cast)(转载)

C 风格(C-style)强制转型如下:  (T) expression // cast expression to be of type T  函数风格(Function-style)强制转...
  • oldmtn
  • oldmtn
  • 2012年04月10日 17:46
  • 553

C++------const类型定义

const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令  **************常量必须被初始化************************* cons...
  • yf210yf
  • yf210yf
  • 2012年07月13日 18:37
  • 565

C++命名的强制类型转换(static_cast dynamic_cast const_cast reinterpret_cast)

cast_name(expression) 1. static_cast:任何具有明确定义的类型转换,只要不包含底层const(比如常量指针,而不是指针常量),都可以使用。常用于窄化转换(告诉程序的读...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++ 的const类型
举报原因:
原因补充:

(最多只允许输入30个字)