c – 为什么我们允许使用不完整类型的地址?
考虑这个代码:
class Addressable; class Class1 { void foo(Addressable &a) { (void) &a; } }; // OK class Addressable { void *operator &() { return this; } }; class Class2 { void foo(Addressable &a) { (void) &a; } }; // Error: operator & private 为什么C允许使用不完整的参考类型的地址? 如上图所示,它不可能是非法的吗?这是有意的吗? 解决方法
是的,这是有意的,如果运算符和被超载是已知的.
早在C之前就已经有了不完整的地址.在C中,绝对没有任何破损的风险,因为&不能超载. C选择不会不必要地破坏以前有效的程序,并且简单地指出,如果一个不完整的类型确实有一个超载&运算符,是否重载运算符被使用是未指定的. 报价N4140:
这可以解释为甚至应用于当前正在声明的课程,甚至在操作符&已经看到: extern struct A a; struct A { int operator&(); decltype(&a) m; // int,or A *? }; int main() { return A().m; // only valid if m is int } 在这里,GCC给出A型*,并拒绝该程序,但是clang给它类型int并接受它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- xml – XSL:计算以前唯一的兄弟姐妹
- 键入后,在ruby模式下自动取消“结束”?
- ruby-on-rails – 如何在RSpec中模拟类方法期望语法?
- Oracle归档日志写满(ora-00257)了怎么办
- 使用SlowCheetah扩展插件解决测试环境和生产环境xml配置文件
- Searching BPM tasks by payload content: Flex Fields (Ma
- ruby-on-rails-3 – 在模型更改重新渲染时,一些嵌套属性消失
- Flash+PHP多文件上传,可将PHP换成别的语言脚本,如asp;jsp等
- 【flex4】datagrid中使用combox
- ios – 限制滑动UISlider超过某一点
- ruby-on-rails – 资源的单个视图上的不同布局和
- The Swift Programming Language学习笔记(九)—
- 使用NSXMLParser解析XML -- XMLReader、XMLWri
- 基于stm32f103zet6之nor flash的学习
- Cocos2d-x_CCControlButton(按钮类)介绍
- Dva0.7.9 React 入门 Demo 篇章 1
- 使用C#轻松编写.Net组件
- ruby-on-rails – Rails应用程序:使用gem,包括带
- ruby-on-rails – 将params [:date]转换为Date的
- MVC会员问题 – C#,EntityFramework