在没有对象的情况下使用decltype和sizeof问题的解决方案
来源:互联网 发布:淘宝商家多发货 编辑:程序博客网 时间:2024/05/16 00:31
假如声明了一个类型A,想得到其大小,可以写作
sizeof(A)
假如定义了一个A类型的对象o,想得到其大小,可以写作
sizeof(o)
假如声明了一个结构体TAG,内有成员m,想得到其大小,可以写作
sizeof(TAG::m)是吗?不行的。因为现在TAG::m的处境非常尴尬:他不是一个类型;但是作为对象又没有资格,因为它的前缀TAG不是一个对象。结果在C++编译器完全支持11标准以前他什么都不是。有个方法可以解决就是
sizeof(((TAG*)nullptr)->m)
只是那个nullptr看着实在是刺眼。因为它隐含着你应该已经知道这个sizeof()内的表达式一定会在编译期而不是运行期落实其值这回事,这样sizeof才能被允许编译。
decltype也存在同样的问题。假如有一个对象o,想得到其类型,可以写作
decltype(o)
但是假如声明了一个类型A,想得到其类型,可以写作
decltype(A)是吗?不行的。人们可能一开始会以为,哦,A的类型不就是A吗?这样的代码有意义吗?但更多的时候,需求其实是类似这样的:
两个类型T1和T2,对应的对象o1和o2,获取表达式o1+o2的类型:decltype(o1+o2)
现在换成没有对象只有类型的情况,我们还是要借助那个刺眼的nullptr了:
decltype(*(T1*)nullptr + *(T2*)nullptr)
够刺眼的了吧?没反应过来的话还以为上面那行代码会引起0地址访问冲突呢...
- 在没有对象的情况下使用decltype和sizeof问题的解决方案
- 效率和方便性--怎样在没有限制类可用性的情况下使用本地方法
- 在没有return的情况下可改变new的对象内的值
- 在没有类的情况下,JavaScript如何创建对象、实现继承?
- 在Newtonsoft.Json无法把DataRow转换成Model对象的情况下的解决方案
- decltype的使用
- sizeof和sizeof的问题
- EGORefreshTableHeaderView在无网络情况下的使用问题
- 使用Bootstrapie8下没有效果的解决方案
- macbook pro 在没有光驱的情况下使用usb 的u盘来安装windows
- Volley在没有网的情况下使用磁盘缓存的数据
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- 指针的大小--sizeof问题和sizeof使用规则
- 在没有UINavigationController的情况下,显示状态栏的方法
- 在没有文档的情况下使用CView及其派生类
- (转)如何在没有文档的情况下使用CView及其派生类
- [PhotoShop]在没有扫描仪的情况下如何使用普通照片PS出扫描效果
- 有时没人的时候自己就会坐在那里想谁会在他们年老的时候想起我
- 用四个砝码称出1—40克所有重量,四个砝码分别为多少? 梅氏砝码问题
- 压力测试的轻量级做法
- C#VS2008断点无效【解决办法】
- 算法87题
- 在没有对象的情况下使用decltype和sizeof问题的解决方案
- Java反射机制详解
- mysql bin-log 清除 slave master bin-log删除
- 算法88题
- 数据结构入门小结之查找
- Spring使用自动代理缺少asm包的问题分析
- 以byte[]类型复制文件 Copy a file with read(byte[] data) and write(byte[] data)
- 项目经理问:我怎么有做不完的事情 – 事件篮方法
- C语言中的单精度双精度数的有效位数