私は、いくつかのレガシーコードの多くで次のパターンを見ています。私はそれに精通していないので、それがなぜそこにあるのかわからない。ヘッダファイルで奇妙な構成パターン
:
struct ook
{
bool func_called; // Not declared as const!
bool func();
ook();
};
ソースファイルで:
ook::ook():
func_called(func())
{} // ← Nothing there whatsoever.
bool ook::func()
{
// … ← Some stuff without a "return" statement of any kind.
return true; // This does mean that func_called is always true.
}
が、これは何か役に立つか、単に奇数判定からいくつかの恐ろしいコピー&ペーストのエラーですか?
今や、func_called
はコンストラクタでのみ呼び出され、コードでは決して呼び出されません。もしそれがあったとしたら、Florian Castellaneで指摘されているように、his answerであれば意味があります。それが一度だけ起こったなら、私はこれが使用されていたと想像することができます。しかし、それはコードベースで数十回起こるので、他のどのような用途があるのだろうかと思います。
これは私のコードではありません。私は、ロジックが何を書いているのかを(歴史、コメント、単体テストなしで)理解しようとしているだけです。多分それは絶望的でしょうか?
名前があるかどうかはわかりませんが、コンストラクタは空でなければならないというコンセプトに従います。したがって、 'func_called'をコンストラクタ本体に入れるべきかどうかを決定するコードを入れ、その値をデフォルトの構築された変数に代入するのではなく、それを関数に入れて、メンバを直接構築するメンバ初期化子で関数を呼び出します。私は関数が静的である必要があると思います。 – NathanOliver
@Nathan静的である必要はありません。 –
@ PeterA.Schneiderしたがって、クラスが完全に構築される前に非静的関数を呼び出すのは合法ですか? – NathanOliver