header / cpp文件中定义的函数行为不同

时间:2010-08-27 16:25:58

标签: c++

档案: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中定义则不会?

代码的行为方式如何完全不同?

1 个答案:

答案 0 :(得分:4)

你忘记了return吗?

int show()
{
return x.member_variable ? 0: -1;
}

没有它,代码仍然合法,但返回的值有些随机。行为与您放置代码的位置之间可能存在关联。