2012-07-31 48 views
0

在C++定义文件(的.cpp),有时我可以定义小的功能将被调用,例如:在C++定义文件中的功能扩展(CPP)

// Class declaration 
// Myclass.h 
Class Myclass 
{ 
... 
    void Classfunction(); 
... 
} 
// Class defination 
// Myclass.cpp 
#include "Myclass.h" 
... 
void helper_fun() 
{ 
... 
} 
... 
void Myclass::Classfunction() 
{ 
... 
    helper_fun(); 
... 
} 

在上述例子中,我们可以看到void helper_fun()是在.cpp文件中声明和定义的。这个函数的目的是由类中定义的函数调用。当然,helper_fun可以在头文件中声明,然后在实现文件中定义。我的问题是,这是否是C++代码编写的好习惯。而且,这种做法是否有一些不好的影响?谢谢!

回答

2

有在源文件中本地助手功能是很常见的。通常将它们声明为static(例如static void helper_fun() { })或匿名命名空间(例如namespace { void helper_fun() { } })。

将函数设置为静态或使它们位于匿名名称空间中是为了使它们不会从外部调用,从而可以使用更多的本地函数具有相同的名称。

但是,如果您要从其他源文件中调用该函数,请正常定义该函数,并在头文件中添加一个声明。

1

如果你需要它是公开的,并通过头文件包含在其他文件中。然后放在那里。

否则没有理由将它放在标题中。

4

helper_fun定义在源文件中的匿名名称空间中将是一种很好的做法。

像这样:

namespace { 
    void helper_fun() 
    { 
     //... 
    } 
} 

原因是,如果另一个helper_fun在具有相同签名的另一个源文件中定义的,你不会有链接错误的风险。这并不是说会有,而是会有一个。

此外,如果不在相应的源文件之外使用,则不应将函数放在标题中。

+0

+1为匿名命名空间提示 – 2012-07-31 11:19:41

1

如果您在标头中声明helper_fun,则Myclass.h的用户将看到它。你想在其他地方使用helper_fun吗?

将其保存在Myclass.cpp之内即可确保它只能被Myclass.cpp中的代码使用。

1

当然,在.cpp文件中声明函数是可以的。它是帮助函数,所以,你不应该把它的声明给用户。您可以使用匿名命名空间进行内部链接(默认功能具有外部链接)。

未命名的名称空间或直接或间接声明的名称空间 在未命名的名称空间内具有内部链接。

这样

​​