Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是'&';在';操作员++;(国际)及';操作员过载意味着什么?_C++ - Fatal编程技术网

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++