1

私は何を理解し、以下を行いたいfetch().textassert(0)思います。私はfetch()、returnタイプのメンバーを参照できるような関数に精通していませんfetch().text。これはどういうわけかの使用によって可能になりますassert(0)か?

class SimpleS{ 

  struct internal_element {
    const char *text;   
  };

 class SimpleE {
   public:

    SimpleE() {
    }

    const char* text() const {
      return fetch().text;  
    }

    void set_text(const char *text) {
      fetch().text = text;
    }

   private:

    internal_element& fetch() const {
      ... // some code
      assert(0);    
    }
}
4

5 に答える 5

2

assert(0); 常に失敗します。その目的は、このメソッドが最初に呼び出されないようにすることだと思います。

(もちろん、 assert(0); が実行される条件がないと仮定します)

于 2013-02-23T05:48:00.347 に答える
2

主張はそれとは何の関係もありません。ここで起こっていることは、 fetch() が への参照を返すということinternal_elementです。これにより、戻り値でその構造体のメンバーを参照できます。

fetch().text

fetch() によって返されるオブジェクトのinternal_element::textメンバーを参照します。internal_element

なぜそこにあるのかについてはassert(0)、わかりません。コードを教えてくれませんでした。通常、関数がそのようなアサートで終了するのは、プログラマーが何らかの可能性をカバーしていないケースをキャッチしたいためです。例えば:

if (condition)
    //...
else if (condition)
    //...
// We should have covered all possible conditions above and already
// returned. If we actually get here, then we did something wrong.
assert(0);
于 2013-02-23T05:49:53.643 に答える
0

以下のコード(あなたが共有したもの)では、プログラマーは関数を返す条件を取得しました。それは//いくつかのコードが行うべきことです...しかし、条件の1つが真でない(そしてそれが返される)場合、制御は関数の終わりに到達しますそれは致命的なエラーがあることを意味するので、関数の最後に assert(0) の目的があります...

internal_element& fetch() const {

... // コード assert(0);
}

于 2013-02-23T07:22:45.127 に答える