1

我希望了解下面的内容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);    
    }
}
4

5 回答 5

2

断言(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 回答
1
return fetch().text

调用函数fetch。这大概会返回 class 的对象internal_element。然后它访问text这个返回对象的成员并返回它。它实际上等效于:

internal_element temp = fetch();
return temp.text;
于 2013-02-23T05:51:54.497 回答
1

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

于 2013-02-23T05:52:05.943 回答
0

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

internal_element& fetch() 常量 {

... // 一些代码 assert(0);
}

于 2013-02-23T07:22:45.127 回答