コードはひどく複雑です。実際には、getAssigment
メソッドが成功したかどうか、および割り当てられたポインターがnullでないかどうかをテストする必要があります。
このコードは、複雑な方法ではありますが、明示性とC ++の強い型付けを採用しようとするのではなく、弱い型付けを利用してテストします。結果として、それは慣用的なC ++ではなく、必要以上に理解するのが難しいです。
!!a
特に、 C++では使用しないでください。これは、JavaScriptなどの弱い型の言語で確立されたイディオムであり、値をブール型に強制変換します。しかし、C ++では、これは一般的に使用されていません。
hasSolution
定義または使用されていないため、コードが何をするのかは明確ではありません。ただし、コードは次のコードと同等であると思われます。
Assignment *a;
return getAssignment(query, a) and a == nullptr;
0
(C ++ 11より前では、代わりに書く必要がありますnullptr
。)
ただし、このコードは依然として悪い設計を示しています。なぜa
参照によって渡されるのでしょうか。なぜそれは戻り値ではないのですか?さらに悪いことに、a
使用されることはないので、不要です。a
本当に不要な場合は、完全に除外する必要があります。必要な場合は、戻り値にする必要があります。つまり、のプロトタイプはgetAssignment
次のようになります。
Assignment* getAssignment(the_type_of_query query);
そしてそれは単に次のように使用されるべきです:
Assignment* a = getAssignment(query);
さらに、このコードは実際にメモリの所有権をrawポインタに割り当てているのではないかと思いますa
。これは、最新のC++では強く推奨されていません。ポインタを使用しないか、スマートポインタを使用してください。