将临时对象传递给函数
Passing temporary object to function
我认为这被称为临时对象。这是我的场景:
我有一些功能:
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&作为参数。我希望这两种选择都能奏效。
相关文章:
- 编译错误:临时对象构造函数中缺少参数
- 为什么在按值返回时创建临时对象,而不是在按值传递给函数参数时创建临时对象
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 在函数调用中C++临时对象的生存期
- 常量引用函数参数:是否可以禁止临时对象?
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- 检查成员函数是否返回临时对象或数组对象
- 为什么常量引用不能延长通过函数传递的临时对象的生存期?
- 按值函数创建范围的临时对象
- C++临时对象成员函数的生存期
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- C++是否有类似RVO的东西用于将临时对象传递给函数
- C 向构造函数和临时对象的明确调用
- 何时在函数调用中发生临时对象的破坏
- 复制构造函数返回临时对象
- 是否可以从成员函数中检测对象是否为临时对象
- 传递给构造函数的临时对象的C++生命周期
- 重载函数时使用临时对象作为参数是一种好的做法吗
- 引用的临时对象的析构函数
- 使用临时对象调用构造函数