C++ 的常见问题和解答[不断更新]
来源:互联网 发布:js正则判断是否为小数 编辑:程序博客网 时间:2024/05/16 18:49
Q1: delete[] 和delete的区别
Q2:析构函数怎么写, 什么时候要用虚的析构函数
Q2:类对象的生命周期(构造和析构的先后顺序)
Q4:预定义系列
Q5:typedef系列
Q6:优先级和结合顺序
Q7:复杂函数的指针系列
Q8:int表示数据的范围
Q9:几个常用到的CAST语法:
reinterpret_cast 如:
OnNAVI_SEV_POIEntityEvent(reinterpret_cast<const NAVI_SEV_POI_EntityEvent&>(rcEvent));
static_cast 如:
RG_DEMO_SPEED_AUTO == static_cast<enum RgDemoSpeed>(m_wDemoSpeed);
这个和强制转换有没有关?
Q10: memset导致虚表清空的问题:
这个问题在实际的项目中, 发生在某个结构体中存在一个String, 当意图初始化这个街头体时, 产生错误, 下面是两个案例:
案例一: 不当使用memset函数带来的麻烦问题
案例二: memset()函数的用法及常见误区
Q11: #include 和 类声明 的作用:
一般而言, 哪里用到了某个类型, 都会用include去包含, 但这样的话, 会有弱点.
上图就是这样一个现象, 比如SerivceIF中定义了一个enum类型, 这个类型会被Manager类所用到. 这样就遇到了两难的问题, 如何解决问题? 我们就采用了这样一个方式, 不在.h文件中包含全部要用到的头文件, 而尽量在.h使用class XXXclass的方式声明一个类. 而在.c/cpp文件中采用include的方式. 这样, 尽量减少了include的嵌套关系. 以免出现双向引用.
但上述问题的实质是由于类的设计不合理导致的. 比如上面的enum类型, 应该单独的放置到一个专门的文件中声明和定义. 所有的类之间, 不应该出现双向引用的问题.
下面将成为一个C++的伤痛:
另外一个文件跟它存在相互引用关系.
上述会报一个错误, 无论是VS平台或者是GCC平台, 这个错误都显得莫名其妙, 实质上, Base和Derive已经相互include对方的头文件. 这个问题, 在VS平台上已经有人做了总结, 下面给出链接:
error C2146:和error C4430:的错误
造成事态非常严重, 解决的方案是, 用class的声明代替#include. 但是,并不是永远有效, Base如果只是持有Derive的指针, 那么用class 的declaration是没问题的. 如果是持有对象的话, 这个问题就是死结了. 原因是在头文件中声明的对象要分配空间, 所以, 务必要找到定义, 即找到头文件. 同理, 假如Derive是Base的派生类, Dervie也必须依靠include 而非declaration搞定, 因为继承的时候也需要在头文件中决定空间分配, 必须用到include. 那么什么是一个完美方案呢?
1. 尽量用指针定义属性
2. 不要相互引用, 相互引用实质上是一个极其恶劣的编程习惯.
- C++ 的常见问题和解答[不断更新]
- object-c常见问题和解答
- C/C++常见问题( 不断更新)
- C语言编程常见问题解答之时间和日期
- 几个常见问题的解答
- XPE Corral 常见问题和解答
- Oracle几个常见问题和解答
- 正则表达式的汇总和几个常见问题的解答
- 正则表达式的汇总和几个常见问题的解答
- 有关考试安全和完整性的常见问题解答
- JavaMail应用:安装和配置常见问题的解答
- 您解答中期答辩的一些注意事项和常见问题
- 【CSDN常见问题解答】Thread的run()和start()方法
- ffmpeg编程基础和一些常见问题的解答
- CocoaPods安装和使用以及常见问题的解答
- JQuery Mobile常见问题解决方法和注意事项不断更新
- Web开发的常见问题解答
- Javap使用的常见问题解答
- 关于fprintf
- linux /var/log下的日志[RHEL]
- 【收藏】资深HR送给毕业生的5个建议
- flex 读取配置文件 与PHP交互 圆饼图
- SQL Server2000的事务备份与恢复
- C++ 的常见问题和解答[不断更新]
- 网页版大智慧
- Linux启动过程中硬件模块的加载
- [转]ActiveX控件去除IE警告框的方法
- FEDORA13安装图文教程
- 我的语言
- typedef的用法大全。
- jquery 获取元素的值
- 百度面试题