C++ 什么是'&';在';操作员++;(国际)及';操作员过载意味着什么?
方法签名后的C++ 什么是'&';在';操作员++;(国际)及';操作员过载意味着什么?,c++,C++,方法签名后的&是什么意思和作用?我有这个: 迭代器运算符++(int)& 在我的迭代器类型中,但我不记得为什么我必须将它放在那里(只是它修复了我之前遇到的问题)。奇怪的是,我找不到太多关于它的信息,但很可能是因为我不知道它实际上是如何被命名的 一个额外的问题,但它是签名的一部分吗?如果是,指向此方法的指针是什么样子的(&指向何处) 编辑:回答奖金问题:它是签名的一部分(可能会过载)。具有ref限定签名意味着您不能具有非ref限定签名。指针应该是:Iterator(Iterator::*ptr)
&
是什么意思和作用?我有这个:
迭代器运算符++(int)&
在我的迭代器类型中,但我不记得为什么我必须将它放在那里(只是它修复了我之前遇到的问题)。奇怪的是,我找不到太多关于它的信息,但很可能是因为我不知道它实际上是如何被命名的
一个额外的问题,但它是签名的一部分吗?如果是,指向此方法的指针是什么样子的(&
指向何处)
编辑:回答奖金问题:它是签名的一部分(可能会过载)。具有ref限定签名意味着您不能具有非ref限定签名。指针应该是:
Iterator(Iterator::*ptr)(int)&=&Iterator::operator++代码>这是一个左值引用限定符。这是解释
在重载解析期间,类X的非静态cv限定成员函数按如下方式处理:
- [……]
- 左值引用限定符:隐式对象参数具有对cv限定X的类型左值引用
这意味着成员函数只能用于左值。用更简单但不精确的术语来说,这会阻止对临时函数调用该函数。它是一个引用成员函数。基本上,这意味着只能对可以是左值引用的对象调用函数。@Someprogrammerdude是的,谢谢。只是澄清一下,作为到CPPFerence的链接,也不是相关的问题——它是函数签名的一部分吗?(经过实验测试,似乎没有)const
和volatile
成员函数的限定是签名的一部分(也就是说,您可以在const
和非const
限定上重载)。我不知道引用限定,但示例显示了左值和右值引用限定的重载,因此它必须是签名的一部分。@Someprogrammerdude啊,对了,这有点奇怪。您可以在&
和&
上重载,但是您不能拥有没有任何ref限定符的版本(因为这将是不明确的,并且有点荒谬,因为非ref限定的签名可以绑定到两者)。出于好奇,指针应该是(例如我在OP中的例子):Iterator(Iterator::*ptr)(int)&=&Iterator::operator++代码>