我认为这称为临时对象。这是我的场景:
我有一些功能:
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,或使用按值传递。
至于为什么VS2012编译它:VS2012不符合。
关于c++ - 将临时对象传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598449/