- list 的
end()
返回尾后迭代器的拷贝,对吧? - 因此,
list.end()
是一个右值,对吗? - 为列表迭代器重载的 -- 运算符函数采用非常量引用,对吧?
- 不能将右值绑定(bind)到非常量引用,对吗?
那怎么会呢
std::list<int> lst;
// ...
--l.end();`
编译?
正如正确指出的那样,我的第三点不一定是正确的。但是这段也可以编译的代码怎么样?
struct A{};
void f(A&)
{
}
A a()
{
return A();
}
int main()
{
f(a());
}
最佳答案
- the -- operator-function overloaded for list iterator takes a non-const reference, right?
这一点是错误的。 operator--
是一个成员函数,成员函数可以被临时调用。您不将任何对象作为参数传递给此成员函数。所以将右值绑定(bind)到非常量引用的问题一开始就不会出现。
至于编辑(将 rvalue 传递给 f(A&){}
),它是一个非标准扩展。我猜想您正在使用 Microsoft Compiler,因为我知道它有这个非标准扩展,在我看来这很愚蠢。
关于c++ - 为什么 --list.end() 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117357/