我希望了解fetch().text
和assert(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);
}
}
答案 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);
}