在C ++中返回不完整类型的副本

时间:2013-08-28 05:42:13

标签: c++ visual-c++

我刚刚发现此代码在VS 2010中的头文件(至少)中是合法的

class AClass; //forward declaration of AClass (incomplete type);
class UseAClass
{
   public: 
      AClass returnAClass(); //return a copy of incomplete type - AClass ???
}

有人可以解释一下我为什么要写这个?

1 个答案:

答案 0 :(得分:4)

允许这样做,因为编译器在返回AClass的函数的声明点不需要AClass大小的知识。但是,如果您尝试在其中提供函数的定义(或在类AClass中创建UseAClass类型的成员),则需要sizeof(AClass)由编译器,因此您需要包括定义AClass的头文件。你也可以这样做:

void acceptAClass(AClass obj); //only the declaration, NO DEFINITION!

请注意,此技术通常用于打破标头的循环依赖性,因为这不需要在.h文件中包含一些标头:只需前向声明就足够了。在.cpp文件中,您包含标题并提供定义。