第一题里关于多文件定义全局变量这个问题,答案应该是不确定的。可以参考Google C 编程规范,里面明确规定,禁止定义全局非POD类型的对象。原因就是多文件全局初始化顺序不确定。第二题里关于多态和dynamic_cast,这种继承关系的类会在头部几个字节添加runtime信息,具体是什么样的结构想不太起来了,侯捷老师翻译的《C 对象模型》里有详细的介绍。dynamic_cast有的实现好像是会去比较两个类的runtime信息是否一致,里面甚至会用到字符串匹配,所以dynamic_cast效率比较其他几种转换会低一些。dynamic_cast转换引用时,发生失败不会返回空指针,而是会抛出异常,如果用到一定要特殊处理一下。
点赞 3

相关推荐

牛客网
牛客企业服务