包含内的包含范围是什么?

时间:2012-08-13 17:49:22

标签: c++ include

我不确定会发生什么,但请采取以下措施:

class A{

}

-

class B{
 #include "A.h"
}

-

class C{
 #include "B.h"
}

现在,如果我要在C类中编写代码,那么它是否也会自动包含A类?据我所知,#include基本上就是在现场复制整个文件。

任何人都可以详细说明这个吗?

我正尽力使用班级转发。但有时我根本不能。

编辑:

上面的类不在同一个文件中。想象一下他们分开了。

编辑II: 让我把它放在更多的背景下。

让我说我正在创建一个包含类B的新类,但后来我声明了一个类型为A的变量。这似乎是编译的,即使我从未将A包含在类中。这就是它在C ++中的用途吗?

3 个答案:

答案 0 :(得分:2)

这基本上会在类B内声明一个名为A的嵌套类

include指令应该位于文件顶部以外的任何其他位置的情况非常罕见,并且通常与您拥有的目的完全不同。

如果我正确理解您的文件层次结构,则相当于:

//A.h
class A{

};

//B.h
class B{
  class A{

  };
};

//C.h
class C{
  class B{
    class A{

    };
  };
};

答案 1 :(得分:1)

你是对的,预处理器只是复制标题。如果愿意,可以把它想象成一个长宏。

答案 2 :(得分:1)

#include指令只是告诉编译器假装指定文件中的文本已写入#include指令所在的位置。它与范围,语法或其他任何内容无关。这只是文字。

如果没有看到A.h和B.h的内容,就不可能再详细说明那些#include指令的效果了。