档案:A.h
class A
{
public:
struct x X;
int show()
{
x.member_variable ? 0: -1;
}
};
现在,如果A.cpp被编译,其中包含A.h(实际上是在一个巨大的项目空间中),我们会看到x.member_variable值不符合预期。但是如果删除show()方法并将其放在A.cpp中,则代码行为正常 - 这意味着x.member_variable值是正确的。
如何发生这样的事情 - 我们从objdump看到的一件事是,如果函数是在A.h中定义的,那么该方法被视为内联函数,否则如果在A.cpp中定义则不会?
代码的行为方式如何完全不同?
答案 0 :(得分:4)
你忘记了return
吗?
int show()
{
return x.member_variable ? 0: -1;
}
没有它,代码仍然合法,但返回的值有些随机。行为与您放置代码的位置之间可能存在关联。