为什么我不能添加指针?

The*_* do 13 c++ pointers

我的代码非常类似于此:

LINT_rep::Iterator::difference_type LINT_rep::Iterator::operator+(const Iterator& right)const
{
    return (this + &right);//IN THIS PLACE I'M GETTING AN ERROR
}

LINT_rep::Iterator::difference_type LINT_rep::Iterator::operator-(const Iterator& right)const
{//substracts one iterator from another
    return (this - &right);//HERE EVERYTHING IS FINE
}

err msg: Error  1   error C2110: '+' : cannot add two pointers
Run Code Online (Sandbox Code Playgroud)

为什么我只在一个地方而不是两个地方都收到错误?

fre*_*low 54

742 Evergreen Terrace + 1 = 743 Evergreen Terrace

742 Evergreen Terrace - 1 = 741 Evergreen Terrace

743 Evergreen Terrace - 741 Evergreen Terrace = 2

743 Evergreen Terrace + 741 Evergreen Terrace = ???

  • @Indrek你建议第四行的结果是什么?添加两个地址根本没有意义. (2认同)
  • @Fred:1484 常青露台。呃。;-)(我同意@SigTerm:很好的例子) (2认同)

Mic*_*bus 38

在C++中禁止指针添加,你只能减去两个指针.

这样做的原因是减去两个指针给出了逻辑上可解释的结果 - 两个指针之间的内存偏移量.类似地,您可以从指针中减去或添加整数,这意味着"向上或向下移动指针".添加指针指针是很难解释的.结果指向者会代表什么?

万一您明确需要存储一个指针到一个地方,其地址是一些其他的两个地址的总和,你可以投两个指针int,增加intS,并转换回指针.但请记住,这个解决方案需要非常关注指针算法,这是你真正不应该做的事情.

  • 转换为int是个坏主意,因为sizeof(int)可能不是sizeof(void*).使用类似ptr_diff_t的东西将是更好的选择. (7认同)