1

C ++クラスでは、2つのスタイルのいずれかでメンバーを記述できます。それらを名前空間ブロック内に配置することも、それぞれを完全に修飾することもできます。

あるスタイルを他のスタイルよりも好む理由はありますか?

ヘッダーファイルは次のようになります(bar.h):

namespace foo
{
    class Bar
    {
    public:
        Bar();
        int Beans();
    };
}

スタイル1(bar.cpp)-名前空間ブロック内の宣言

#include "bar.h"
namespace foo
{
    Bar::Bar()
    {
    }

    int Bar::Beans()
    {
    }
}

スタイル2(bar.cpp)-完全修飾宣言

#include "bar.h"

foo::Bar::Bar()
{
}

int foo::Bar::Beans()
{
}

ですから、私の質問は、繰り返しますが、あるスタイルを他のスタイルよりも好む理由はありますか?

4

1 に答える 1

0

これは、James Kanze が別の同様の質問に答えて投稿した回答の可能性です。(編集: コメント スレッドからのメモ、これは非メンバー関数にのみ適用されます) .

完全修飾形式 (スタイル 2) を優先します。

このスタイルで記述された関数は、宣言ではなく明示的に定義です。

つまり、スタイル 2 を使用すると、間違った引数で誤って関数を定義すると、その事実を警告するコンパイラ エラーが発生します。

スタイル 1 を使用して、間違った引数で関数を定義すると、別の関数が定義されます。正常にコンパイルされますが、メソッドが定義されていないことを説明するリンカ エラーが表示されます。これはおそらく、スタイル 2 に起因するコンパイラ エラーよりも診断が難しいでしょう。

于 2012-05-22T01:21:37.330 に答える