类C ++和范围内的标头

时间:2018-12-11 02:02:10

标签: c++

我有一些代码

class anyClass
{ 
    #include"headerWithSomeFunction.h"
}

和在headerWithSomeFunction.h

#pragma once
void SomeFunction(){};

相同吗
class anyClass
{ 
    void SomeFunction(){};
}

这是否具有危险的范围含义。我正在使我的代码更具可读性。 谢谢

1 个答案:

答案 0 :(得分:2)

  

是否一样

可能相同。在这个最小的示例中,它是相同的。但是,如果首先从其他位置包含文件,则#pragma一次将导致该文件内的包含为空,因此不相同。如果您删除了注释,那么 then 的效果将相同。

尽管名称为“ header”,但预处理器随附的文件在技术上并不限于位于文件的“ head”。

  

我正在使代码更具可读性。

然后,我建议不要在类定义内包含标头。

实际上,我建议仅在全局名称空间范围内包括头文件。这是一个广泛使用的约定,严格遵守该约定可使标头文件的阅读者了解该标头的内容,而无需知道该标头包含在何处。

头文件的声明和定义的含义不应取决于该文件所包含的位置。块作用域中或类定义中的声明与命名空间作用域中的声明具有完全不同的含义。