我刚刚浏览了draft of the C++11 standard并发现以下令人费解的陈述(§13.6/8):
For every type
T
there exist candidate operator functions of the formT* operator+(T*);
应该如何理解指针上的这个“一元+”运算符?这只是正常情况下的无操作,但仍然可以重载吗?还是我在这里遗漏了一些更深层次的观点?
最佳答案
指针上的 +
是一个 noop,除了将事物转换为右值。如果你想衰减数组或函数,它有时会很方便
int a[] = { 1, 2, 3 };
auto &&x = +a;
现在 x
是 int*&&
而不是 int(&)[3]
。如果您想将 x
或 +a
传递给模板,这种差异可能会变得很重要。 a + 0
并不总是等价的,请考虑
struct forward_decl;
extern forward_decl a[];
auto &&x = +a; // well-formed
auto &&y = a + 0; // ill-formed
最后一行格式错误,因为向指针添加任何内容都需要完全定义指针指向的类类型(因为它前进了 sizeof(forward_decl) * N
个字节)。
关于c++ - 一元 + on 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266648/