【问题标题】:Function reference and assert(0) in C++C++中的函数引用和assert(0)
【发布时间】:2013-02-08 20:35:34
【问题描述】:

我想了解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);    
    }
}

【问题讨论】:

  • assert(0); 上面的... // some code 对解释代码很重要,代码assert(0); 运行可能有一些条件。

标签: c++ class function reference struct


【解决方案1】:

断言与它无关。这里发生的是 fetch() 返回对 internal_element 的引用。这使您能够在返回值中引用该结构的成员:

fetch().text

指的是 fetch() 返回的internal_element 对象的internal_element::text 成员。

至于为什么会有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】:

    断言(0);总会失败。我想它的目的是确保从一开始就不会调用这个方法。

    (当然,假设 assert(0); 没有条件运行)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        return fetch().text
        

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

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

        【讨论】:

          【解决方案5】:

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

          internal_element& fetch() const {

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-13
            • 2016-08-18
            • 1970-01-01
            • 2018-01-13
            相关资源
            最近更新 更多