私のコードの中には、奇妙な動作を開始したばかりのものがいくつかありました。以下のような短いコードスニペット:奇妙なassertが論理変数とbool変数に失敗する
#include <cassert>
class A{
protected:
bool isM, isN;
public:
void someFunction();
};
A::someFunction(){
assert (this->isM && this->isN);
...
}
はassertion failed
結果を生成します。一方、わずかにコードを変更した後:
A::someFunction(){
assert(this->isM);
assert(this->isN);
...
}
アサーションは問題なく通過し、機能は正常に終了します。実際に呼び出す前にbool
の変数が設定されているので、機能の正常終了は期待される機能です。someFunction()
。
追加の質問として、C++でアサーションを実行するより良い方法がありますか?私はCで成長しましたが、Cスタイルのアサーションを使っています。私はちょうどこれにGoogleの表面を傷つけたが、何も新しいことを暗示するものは何も見つかりませんでした。
問題のある状況を誰かが認識できない場合は、必要に応じて、クラスと変数のコンテキストを増やすことができます。 bool
の変数はサブクラスのインスタンスで実際に設定されますが、someFunction
はclass A
インターフェイスで実装される珍しい機能の1つですが、これは疑問を複雑にしているため、コミュニティが適切と考える場合にのみ詳細に編集します。
あなたは 'someFunction()'の呼び出しの前に 'bool'変数が設定されているのでしょうか? – juanchopanza
ブールはセットされていますか? – dexametason
C++ 11は 'static_assert'を返します。これはコンパイル時のアサーションです。私はそれが以前のC++バージョンのためにも利用可能であると思います。 – RedX