针对const_cast,太多人在用同一个示例问同一个问题:
void main(){
   const int a = 3;
   const int *pc = &a;
   int *p = const_cast<int *>(&a);
   *p = 5;
   printf("%d,%d,%d",*p,*pc,a); //结果是 5,5,3
}
最终输出的a,为何是3而不是5?
C++对用const定义的常数变量,不是靠地址空间中的内容来取数的,而是靠保存在符号表中的索引来取数的,因此常数变量a无论什么情况下使用都是常数3。
事实上,变量a地址空间中的内容确实是5,但即使你*(&a)来取数仍是3。你可以这样来取变量a地址空间中的内容:
  const int *d = &a;
  printf("%d\n", *d);

  int d = const_cast<int>(&a);
  printf("%d\n", *(int *)d);
此时输出的结果是5。

上述问题都是针对单变量常数而言的,对于结构或类,const_cast的使用与你的直观理解是无出入的。
C++提供了去除const或volatile属性的const_cast类型转换,使你可以对一常数变量进行修改,问题是你的设计为什么会导致非要对一常数变量进行修改呢?
C++的编程准则:const或volatile属性,禁止在指针或引用的类型转换中移除。

C++:const_cast类型转换的更多相关文章

  1. static_cast, dynamic_cast, const_cast 类型转换如何使用?

    static_cast 用法:static_cast < type-id > ( expression ) 说明:该运算符把expression转换为type-id类型,但没有运行时类型检 ...

  2. 清楚理解const_cast类型转换

    1.任何使用原常量的地方, 已经直接编码到代码中去了.故后续转换类型并不能改变原定义 2.const_cast转换, 是使用了新指针或者引用,指向了原定义的内存,故而可以修改该内存. 使用也得用新指针 ...

  3. const_cast的应用

    对于const变量,我们不能修改它的值,这是这个限定符最直接的表现.但是我们就是想违背它的限定希望修改其内容怎么办呢?于是我们可以使用const_cast转换符是用来移除变量的const限定符.con ...

  4. Google开发规范

    v0.2 - Last updated November 8, 2013 源自 Google's C++ coding style rev. 3.274 目录 由 DocToc生成     头文件   ...

  5. Google's C++ coding style

    v0.2 - Last updated November 8, 2013 源自 Google's C++ coding style rev. 3.274 目录 由 DocToc生成     头文件   ...

  6. C++Primer笔记-----day03

    ==============================================================day03================================= ...

  7. c++开发规范

    目录 1. 头文件 1.1. Self-contained 头文件 1.2. #define 保护 1.3. 前置声明 1.4. 内联函数 1.5. #include 的路径及顺序 2. 作用域 2. ...

  8. Google C++编程风格指南 - 中文版

    Google C++编程风格指南 - 中文版 from http://code.google.com/p/google-styleguide/ 版本: 3.133原作者: Benjy Weinberg ...

  9. const学习(续)

    续接上一篇<C++ const学习> const与成员函数 之前说到了const修饰成员函数本身. const成员函数不能修改对象成员值 对于const或者费const对象都可以调用con ...

随机推荐

  1. CUDA概述

    基本概念和定义 CUDA实际上是一种多平台计算系统,最基本的配置是一台CPU主机和一块显卡,两者都能进行计算.其中CPU主机称为host, GPU称为device,CUDA的API程序的命名和参数命名 ...

  2. 在pycharm中自定义模板代码,快速输出固定代码块

    pycharm中有时会经常输出固定一段代码,为避免每次重复输入,可以自定义一段模板代码,请看以下图教程: 1.  点击 file   里面的   setting 2. 在搜索框输入live,就会显示出 ...

  3. [AirFlow]AirFlow使用指南一 安装与启动

    1. 安装 通过pip安装: xiaosi@yoona:~$ pip install airflow 如果速度比较慢,可以使用下面提供的源进行安装: xiaosi@yoona:~$ pip insta ...

  4. webpy/flask/bottle性能测试

    这三个都是Python WSGI的web开发框架,到底用哪个呢?单纯从性能的角度而言,可能哪个快就用哪个,但是这也不是绝对的.比如我就比较喜欢webpy的router配置放在一个文件中,而flask和 ...

  5. DevOps实践

    云计算 [ 01 ]GitLab+Rancher实践DevOps[转载] [ 02 ]Kubernetes CentOS 7.4搭建Kubernetes 1.8.5集群 kubeadm搭建kubern ...

  6. MYSQL 调优和使用必读

    转载自:http://blog.eood.cn/mysql#rd?sukey=fc78a68049a14bb29c60f21c5254b15a1a9234459cf25ff467de14129ca11 ...

  7. C++题目(论述类)

    0.面向对象 三大特性:封装性.继承性.多态性 1.static  ①只进行一次初始化,而且保存在静态存储区,是在程序运行时就进行初始化了: ②当我们同时编译多个源文件(.c文件)时,所有未加stat ...

  8. BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】

    BZOJ1690 Usaco2007 Dec 奶牛的旅行 题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得 ...

  9. 《DSP using MATLAB》示例9.2

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  10. 《DSP using MATLAB》示例Example 8.14

    %% ------------------------------------------------------------------------ %% Output Info about thi ...