问题:

  考察了reinterpret_cast和static_cast的区别。顺道发现了一个可以查看c++内存布局的工具(在VS中)。

结果:

  前两个输出的地址形同,后一个不同。

class A{int m;};
class B{int m;};
class C: public A, public B{};
C c;
int main()
{
printf("%p, %p, %p", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));
return ;
}

1)选择类文件上右键属性:

2)先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),

则只会打出指定类XXX的内存布局。近期的VS版本都支持这样配置。

3)看到结果:

结果分析:

  因为static_cast提供了更加安全的静态类型转换,将C类型的地址使用B类型指向后,会在原来C的地址基础上便宜4个字节刚好是B类型的地址。

  However,reinterpret_cast提供的是不安全的类型装换,它仅仅是把c的地址copy了一下,就强行复制给B类型的指针了。

最新文章

  1. Meet python: little notes 4 - high-level characteristics
  2. 【编程题目】查找最小的 k 个元素
  3. Smarty模板技术学习(二)
  4. Sql 注意点
  5. eMarketer:DMP帮广告主搞定大数据处理问题
  6. bat转向指定的目录路径处
  7. Canvas: 优雅的代码作图系列:中国国旗
  8. .vue文件在webstorm中es6语法报错解决方法
  9. 设计模式-发布订阅模式(javaScript)
  10. 制作OpenStack使用的windows镜像
  11. ASCII对应码表-键值(完整版)
  12. 通信导论-IP数据网络基础(3)
  13. Tomcat(一):背景知识和安装tomcat
  14. Thinkphp3.2+PHPQRCode 二维码生成示例
  15. vue的cli中自定义router
  16. Cordova-conifg.xml配置
  17. PL/SQL 存储过程
  18. sqlserver 几种datatime的区别
  19. Linux 服务器加入Windows AD
  20. Linq 和 SQL的左连接、右连接、内链接

热门文章

  1. Google Protocol Buffer 的使用(二)
  2. I/O---BufferedInputStream及相关类介绍
  3. php-fpm配置项
  4. pc3-12800
  5. pymongo collection.save 问题
  6. mysql数据类型和java数据类型匹配
  7. Eclipse配色方案插件 真漂亮!
  8. Python学习系列之内置函数
  9. zabbix学习系列之配置邮件告警
  10. centos7容量扩充