C ++中的函数引用和断言(0)

时间:2013-02-23 05:42:43

标签: c++ class function reference struct

我希望了解fetch().textassert(0)下面的内容。我不熟悉像fetch()这样可以引用返回类型成员的函数,即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);    
    }
}

5 个答案:

答案 0 :(得分:2)

断言(0);永远都会失败。我想它的目的是确保首先调用这个方法。

(当然,假设断言(0)没有条件;正在运行)

答案 1 :(得分: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);

答案 2 :(得分:1)

return fetch().text

调用函数fetch。这可能会返回类internal_element的对象。然后,它访问此返回对象的text成员并返回它。它实际上等同于:

internal_element temp = fetch();
return temp.text;

答案 3 :(得分:1)

如果代码中的... // some code有条件返回,则永远不会调用assert(0)assert(0)基本上会导致异常,如果未在调用函数中捕获异常,程序将会死亡。

答案 4 :(得分:0)

在下面的代码(你共享)中,程序员获得了使函数返回的条件,这就是//某些代码应该做的...但是如果其中一个条件不正确(并返回)控制到达函数结束意味着存在致命错误,因此在函数结束时断言(0)的目的是......

internal_element&安培; fetch()const {

... //一些代码       断言(0);
    }