1

可能性の重複:最後の数週間の間に
Does const-correctness give the compiler more room for optimization?C++のconst-正しさとconstのメンバー

、私は、可能な場合は、すべて私の非静的メンバにconstを作るためのものを開発してきました意図しないプログラミングエラーを避けるためです。しかしながら、この実践は、特にエンティティオブジェクトの場合、いくつかの大きな欠点を提供する。ポインタを使用するのではなく、そのようなエンティティオブジェクトを直接集約することを選択した場合、誰も代入演算子をもう呼び出すことはできません。

私の質問は、このconstメンバの哲学がコンパイラの最適化ボーナスを提供するかどうかについてです。このclass「メンバーはconstた場合

class User { 
public: 
    User(const std::string &, const std::vector<unsigned char> &); 
    ~User(); 
    const std::string &getName() const; 
    const std::vector<unsigned char> &getPasswordHash() const; 
private: 
    std::string name; 
    std::vector<unsigned char> passwordHash; 
}; 

は、それが重大な最適化の可能性と私のコンパイラを提供しますか?実際には他のクラスは非constオブジェクトUserを集約するでしょうが、私のほとんどのアルゴリズムはconst User &を受け入れますか?

constのメンバーは、既に存在しているconst User &のメンターシップよりも有意義な最適化の機会を提供していますか?そして、それはconst User *アグリゲーションを使用して正当化し、代入演算子を使用するのではなく、変更時にオブジェクトを再構築するでしょうか?

ありがとうございました!

+0

重複しています。より速く進むためにconstを使用するのではなく、intenteを宣言してプログラムのバグの可能性を減らすことに注意してください。 –

答えて

2

SOでそれについてのチェックアウトともHERE

+0

私の悪い、申し訳ありません。質問に完全に答えます。 –

+0

ああありがとう! –

1

まず、語彙上の注意:エンティティオブジェクトは、定義により、 同一性を有し、かつその割り当てをサポートしていません。私はあなたが意味するものは 値オブジェクトだと思います。

そうでなければ:私は一般的に、データを作る際にほとんど利点がないことを発見しました。 メンバーはconstです。あなたが気づいたように、代入は不可能になります。 これは、値型に対してconstにすることはできません。エンティティ オブジェクトを割り当てることはできませんが、 の不変なメンバ(識別子など)をconstにするには値がありますが、すべてのアクセスが制御する小さなブロックのブロック にあるので、値はかなり小さくなります パブリックインターフェイスではconstよりです。

もう1つの可能性は、そのようなメンバに不変型を定義することです。それはあなたが それで何ができるかを制限するタイプstd::stringで のみ単一のデータメンバを含んでいた場合でも、 がはるかに表現力、それはstd::string、およびIdentifierとして定義 にあるよりも、Identifierとしてnameを定義することです。 (後で識別子の表現 を変更することも容易になります。)

関連する問題