c++ - 一元 + on 指针

标签 c++ c++11 operator-overloading

我刚刚浏览了draft of the C++11 standard并发现以下令人费解的陈述(§13.6/8):

For every type T there exist candidate operator functions of the form

T* operator+(T*);

应该如何理解指针上的这个“一元+”运算符?这只是正常情况下的无操作,但仍然可以重载吗?还是我在这里遗漏了一些更深层次的观点?

最佳答案

指针上的 + 是一个 noop,除了将事物转换为右值。如果你想衰减数组或函数,它有时会很方便

int a[] = { 1, 2, 3 };
auto &&x = +a;

现在 xint*&& 而不是 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/

相关文章:

c++ - 初始化通用模板化容器

c++ - 重载 << 运算符错误 C2804 : binary 'operator <<' has too many parameters

c++ - 算法的大 O 表示法

c++ - 使用简单的 CRITICAL_SECTION,似乎陷入僵局

c++ - Qt支持的各个平台上int保证是32位的,还是只有qint32?

C++ 线程与可见性问题——常见的工程实践是什么?

c++ - Override = operator linked linked c++ 深拷贝

c++ - 为什么我会收到 "invalid conversion from ' Queue*/Stack *' to ' int'"错误消息?

c++ - 我如何从具有 X 元素的 std::vector 中的 p 中提取 n 个元素

c++ - 在 C++ 中重载二元关系运算符的正确方法