为什么尽管注释了所需的头文件,但该C ++程序仍能编译并运行?

时间:2018-07-19 17:43:28

标签: c++

我正在浏览一组C ++教程,并正在使用其中一个示例的标头。为什么即使注释了public class ClassB { public int Number { get; set; } public List<string> Foo { get; set; } } public class ClassA { private ClassB classB; public ClassA(ClassB classB) => this.classB = classB; } public class ClassC { private ClassB classB; public ClassC(ClassB classB) => this.classB = classB; } int number = 10; var fooList = new List<string>(); ClassB X1 = new ClassB() { Number = number, Foo = fooList }; // both A and B have the same reference to X1 so you will need to consider thread safety if you are modifying X1 var classA = new ClassA(X1); var classB = new ClassB(X1); algorithm,以下内容仍然可以运行?

vector

1 个答案:

答案 0 :(得分:1)

在C ++中(与C不同),允许包含任何一个标准标头的行为等同于包含任何或所有其他标准标头。因此,如果您包含curl "http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_2of2.zip?AuthParam=XXX" -o linuxamd64_12102_database_2of2.zip,则可以等同于还包含<iostream><algorithm><vector>等。

早期,许多编译器/库都充分利用了这一点。最近,它们往往更接近标题 ,以声明/定义所需的内容,但仍有一些标题至少间接包含其他一些标题。