0

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 ファイルで定義されていることがわかります。この関数の目的は、クラスで定義された関数によって呼び出されることです。もちろん、最初に head ファイルで helper_fun を宣言してから、実装ファイルで定義することができます。私の質問は、これが C++ コード作成の良い練習になるかどうかです。さらに、この慣行には何らかの悪影響がありますか? ありがとう!

4

5 に答える 5

4

helper_funソース ファイル内の匿名名前空間で を定義することをお勧めします。

このような:

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

理由はhelper_fun、同じ署名を持つ別のソース ファイルで別のものが定義されている場合、リンケージ エラーのリスクがないからです。あるとは言いませんが、あるかもしれません。

また、それぞれのソース ファイルの外部で使用しない場合は、ヘッダーに関数を配置しないでください。

于 2012-07-31T11:19:06.357 に答える
2

ソース ファイルにローカル ヘルパー関数を含めることは非常に一般的です。通常、これらはstatic(例: static void helper_fun() { }) として宣言されるか、匿名の名前空間 (例: namespace { void helper_fun() { } }) で宣言されます。

関数を静的にするか、匿名の名前空間に配置すると、外部から呼び出すことができなくなり、同じ名前のローカル関数をより多く持つことができます。

ただし、他のソース ファイルから関数を呼び出したい場合は、通常どおり関数を定義し、ヘッダー ファイルに宣言を追加します。

于 2012-07-31T11:21:35.597 に答える
1

公開する必要があり、ヘッダーファイルを介して他のファイルに含める必要がある場合。それからそこに置いてください。

そうでなければ、それをヘッダーに入れる理由はありません。

于 2012-07-31T11:17:54.623 に答える
1

helper_funヘッダーで宣言すると、 のユーザーに表示されますMyclass.h。他の場所で使用されたいhelper_funですか?

内だけに保持することで、 内のMyclass.cppコードでのみ使用できるようになりますMyclass.cpp

于 2012-07-31T11:19:15.917 に答える
1

もちろん、.cpp ファイルで関数を宣言しても問題ありません。これはヘルパー関数なので、ユーザーに宣言を渡すべきではありません。内部リンケージに匿名名前空間を使用できます(デフォルトでは、関数には外部リンケージがあります)。

名前のない名前空間、または名前のない名前空間内で直接的または間接的に宣言された名前空間には、内部リンケージがあります。

このような

namespace
{
// helper_fun has internal linkage.
void helper_fun()
{
}

}
于 2012-07-31T11:20:07.197 に答える