c++类的初始化函数中的bug
来源:互联网 发布:贪吃蛇c语言实现思路 编辑:程序博客网 时间:2024/04/29 15:05
c++类中构造函数的作用,简言之,就是给一些变量设定一个初值。然后初始值可以在构造函数中设定,也可以在初始化列表中设定。
在初始化列表中设定初值的话,存在一个非常隐蔽的bug。因为初始化列表的执行顺序是和data member的声明顺序一样的,bug也就是出在这。
看下面这个类:
class X
{
public:
X(int val)
:y(val),x(y){}
void cout_x_y()
{
std::cout<<x<<y<<std::endl;
}
~X(){}
private:
int x,y;
}
可能写这个类的人是希望先对y赋值,然后再用y的值来给x赋值,但是实际上编译器执行执行这段代码的时候,是先用y对x赋值,然后再用val来对y赋值。所以,出现一个状况,当调用cout_x_y()的时候,x的值就比较奇怪了。这个bug隐藏得比较深,visual studio 2005对这个是没有警告,或者错误提示。据说g++会给出一个警告信息。但是我试了一下,好像并没有给出提示信息,难道是g++的版本问题?比较奇怪……但是不管怎么说,以后这种bug还是要尽量避免,否则调试起来估计会比较头疼吧~~
- c++类的初始化函数中的bug
- 【C/C++】构造函数的初始化列表
- php中的round函数的bug
- objective-c中的构造函数(对象初始化)(七)
- objective-c中的构造函数(对象初始化)(七)
- Objective-C中的便利初始化函数和便利构造器
- objective-c中的构造函数(对象初始化)(七)
- extjs 初始化函数 中的 this.callParent(arguments);类似于继承么?就是继承父类的对应的初始化函数
- Swift子类初始化函数中调用父类初始化函数的位置与Objc中的惯例不同。
- ios中的初始化函数
- [c++] c++ 类中的静态变量初始化
- [C++]类中的静态变量必须初始化
- uio.c 中的初始化
- c++-类的初始化列表
- Objective c类的初始化
- Objective-C 类的初始化
- jquery的slideUp、slideDown函数在IE中的bug
- jquery的slideUp、slideDown函数在IE中的bug
- 飞信2008协议抓包(2)
- 我的C实践(7):位计数
- wordpress函数介绍
- 配置文件加密方案——Derby嵌入式数据库的应用
- [Serializable]C#中的对象序列化
- c++类的初始化函数中的bug
- 我为什么反对在实际项目中使用类似ext的js技术框架
- Android中的Menu
- 我的C实践(8):字搜索
- 《待业青年》 ——谨以此片献给我们逝去的青春 特别是那些不喜欢上学的孩子 简介
- 通过java和snmp获取本机的网关地址
- 显示一个钟表
- How To ... Move Objects to a Surface的疑问之处
- 我的C实践(9):位和字节的重排