程序运行结果怎么和预期的不一样?

JoshuaLui 2016-11-11 10:32:13
#include <string>
#include <iostream>
using namespace std;


class Outer {
class Inner {
public:
Inner(Outer& x) :parent(x) {}
void func() {
string a = "myconst1";
cout << parent.var << endl;
if (a == MYCONST)
{
cout << "string same" << endl;
}
else
{
cout << "string not same" << endl;
}
}
private:
Outer& parent;
};
public:
Outer()
:i(*this)// Outer object
, var(4)
{}
Outer(Outer& other)
:i(other)
, var(22)
{}
void func()
{
i.func();
}
private:
static const char* const MYCONST;
Inner i;
int var;
};
const char* const Outer::MYCONST = "myconst";


int main()
{
Outer o1;
Outer o2(o1);
o1.func();
o2.func();
return 0;
}

运行结果:


为什么不是以下结果 :
4
string not same
22
string not same
...全文
232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-11
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 版主 2016-11-11
  • 打赏
  • 举报
回复
建议单步跟踪程序运行,每步观察变量变化情况,分析原因
yxwsbobo 2016-11-11
  • 打赏
  • 举报
回复
因为 o2 里面的Inner 存储的是o1 而o1的值是4 你想要的结果要改成 Outer(Outer& other) :i(*this)
小灸舞 2016-11-11
  • 打赏
  • 举报
回复
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧