将临时对象传递给函数

Passing temporary object to function

本文关键字:函数 临时对象      更新时间:2023-10-16

我认为这被称为临时对象。这是我的场景:

我有一些功能:

void List<T>::Remove(ListIterator &)
ListIterator List<T>::Begin() //returns an iterator pointing to the first node in the list.

在G++中,当我尝试做这样的事情时:

mylist.Remove(mylist.Begin())

我得到以下错误:

对Remove(ListIterator)的调用没有匹配的函数。

我没有按值获取ListIterator的函数,也不想要。然而,我不确定我想做的事情是否有意义。该代码适用于windows VS2012,但不适用于g++。

任何关于如何修复我的实现或解释这种行为的建议都将不胜感激!

mylist.Begin()的结果是临时的(除非mylist.Begin()返回引用)。你不能使用用于初始化非常量引用的临时。要么指定将结果传递给变量,并将其传递给Remove,使引用const,或使用pass-by-value。

至于为什么VS2012编译它:VS2012不符合。

Kris,如果你看到错误编译器(在你的第一条消息中)给出了"没有匹配的函数用于调用Remove(ListIterator)",编译器会在这里声明ListIterater作为参数传递给Remove,而它期望ListIterator&,因此为了解决更改func声明Begin返回ListIterator&或者,正如Kris所建议的,将Remove-func声明更改为const ListIterator&作为参数。我希望这两种选择都能奏效。