【发布时间】:2020-05-01 02:17:29
【问题描述】:
struct A
{
void f1()
{
f2(); // ok, though f2() is not declared before
}
void f2()
{}
void f3(X*) // error: unknown type name 'X'
{}
struct X
{};
};
int main()
{
A a;
}
为什么成员类型需要前向声明而成员函数不需要?
【问题讨论】:
-
你可以把它想象成函数体实际上出现在类定义之后,例如此代码与
struct A { void f1(); void f2(); .... };后跟inline void A::f1() { f2(); }几乎相同 -
关于草率下结论的一点:您尝试过类似
void f1() { X obj; f2(); }的方法吗?当差异化因素是其他东西时,您确定了“类型与功能”。 (草率下结论并不全是坏事,但明智的做法是知道什么时候做。)
标签: c++ class types standards member-functions