【发布时间】:2020-07-11 04:05:09
【问题描述】:
我在Sequitur G2P的代码中徘徊,发现了一行非常奇怪的代码:
public:
...
const Node *childrenEnd() const { return (this+1)->finalized.firstChild_; }
我知道this是指向当前对象的指针,既然是指针,那么操作是完全合法的,但是this+1到底指的是什么?
【问题讨论】:
-
C++ 的问题之一,以及智能指针被添加到标准库的原因,是原始指针的角色太多。作为迭代器和拥有句柄。然而,这段代码 sn-p 似乎喜欢这种模糊性及其滥用。
-
它只在这里使用过
return binarySearch(childrenBegin(), childrenEnd() - 1, t);和-1有区别吗? -
@JeffUK 不,它没有,如果
this+1指向不同的东西但仍然尝试使用->finalized取消引用,那么它会立即崩溃 -
这段代码刺痛了我的眼睛。我希望这是在一个非常受控的环境中调用的。
-
我认为新标题不合适,
this+1不是增量,this++是。显然,您不能在 C++ 中重新分配this的值。我回到这个问题,被标题的非意义所迷惑,认为这是另一个问题。
标签: c++