【发布时间】:2018-05-15 15:15:24
【问题描述】:
Google c++ 风格有以下几点。我不明白为什么前向声明会调用 f(void*)。
很难确定是否需要前向声明或完整的#include。用前向声明替换#include 可以默默地改变代码的含义:
// b.h:
struct B {};
struct D : B {};
// good_user.cc:
#include "b.h"
void f(B*);
void f(void*);
void test(D* x) { f(x); } // calls f(B*)
如果#include 被替换为 B 和 D 的前向 decls,test() 将调用 f(void*)。
【问题讨论】:
-
如果你只是做
struct D;那么继承是未知的。
标签: c++ include forward-declaration