2011-12-13 10 views
1

私は現在、作業中のライブラリを実装するためのユーティリティ関数をいくつか実装しています。私は、より一般的な名前空間内のクラス定義の一部として静的メンバーとして関数をセグメント化するか、より具体的な名前空間を入力して関数を定義するかを選択する必要がありました。静的関数をクラス定義の一部として参照するオーバーヘッドはありますか?

です:それは、これらのユーティリティクラスがスコープに引き込まれる方法で、より柔軟だったように私は、私は、この設計上の選択かどうかに関連するすべてのオーバーヘッドがあったかどうか不明だったが(使用または継承)以前の感覚を選びます

namespace Utilities { 
    namespace CharUtil { 
    void foo(); 
    } 
} 
Utilities::CharUtil::foo(); 

より遅い

namespace Utilities { 
    struct CharUtil { 
    static void foo(); 
    } 
} 
Utilities::CharUtil::foo(); 

前者は継承を使用する方が速いのですか?

+0

測定が速いかどうかを知る方法は1つだけです。それでも*より速い*は関係ありません。十分速い*問題のみ。 –

+1

もちろん、私はここで髪を分けています。私は良い習慣を開発しようとしています! –

+0

@IanHaggerty素敵な質問ですが、 "時期尚早の最適化"を得る準備ができています。しかし、メンバ関数が追加のパラメータを持つ自由な関数であり、静的メンバ関数が単なる自由な関数であることが分かったら、とにかく問題は時代遅れになります。 –

答えて

2

2つの場合の間には、機能の変更された名前を除いて全く違いはありません。静的関数は隠し引数としてthisポインタを持っていません。両方の関数のコンパイラ生成コードは同じになります。

関連する問題