【发布时间】:2012-11-05 22:19:56
【问题描述】:
我在使用 GCC 的 C++ 类构造函数方面遇到问题。
下面的“foo”类应该模拟像 AL、AH、AX、EAX 等处理器寄存器,我需要一些与该类相关的基本算术。 但我在初始化或“foo”对象中有一个奇怪的行为。
对于以下两种情况,我没有相同的结果:
富 w=0x12345678; // 情况1 富 w ; // 案例 2 初始化(2 步) w=0x12345678;对我来说,案例 2 有效 GCC 调用 foo() (构造函数 1),然后调用 = 运算符。最后, w.m_val 就可以了 但是对于案例 1,GCC 直接调用 foo(long *) (构造函数 2),仅此而已。显然这不是我所期待的。
如果 "foo" 在 char 、 int 或 long 中,则两种情况的结果相同。
我可能对构造函数有误解或做错了什么。有人可以帮我吗?
谢谢。
类 foo { 民众: foo(){ // 构造函数 1 m_val=0; m_ptr=NULL; }; foo(long *p){ // 构造函数 2,永远不应该被调用!!! m_val=0; m_ptr=p; }; 朋友 foo 运算符+( const foo &rhs, const unsigned int v ); foo &operator+= (unsigned int v) { m_val+=v; 返回*这个; } ~foo(){}; foo &operator= ( const foo &rhs ) { m_val=rhs.m_val; 返回*这个; }; foo &operator= ( const unsigned int v ) { m_val=v; 返回*这个; }; 私人的: 无符号整数 m_val; 长 *m_ptr; };【问题讨论】:
-
问题不在发布的代码中(我写这篇文章时)。发布一个完整的、最小的例子来展示这个问题。
-
我在不同的编译器 (Visual Studio 2010) 上尝试了您的代码,但在
foo w=0x12345678;行出现编译器错误,这是我所期望的。所以要么你发现了一个编译器错误(不太可能但并非不可能),要么你没有发布你的真实代码。
标签: c++ class gcc constructor