【发布时间】:2013-02-13 13:42:09
【问题描述】:
- list 的
end()返回过去的迭代器的副本,对吧? - 因此,
list.end()是一个右值,对吧? - 为列表迭代器重载的 -- 运算符函数采用非常量引用,对吗?
- 您不能将右值绑定到非常量引用,对吧?
那是怎么回事
std::list<int> lst;
// ...
--l.end();`
编译?
正如正确指出的那样,我的第三点不一定是正确的。但是这段代码也可以编译呢?
struct A{};
void f(A&)
{
}
A a()
{
return A();
}
int main()
{
f(a());
}
【问题讨论】:
-
第三点错了。
-
@banuj:我不明白
-
我不同意您的第二个示例编译:ideone.com/V98wW3
-
@MarkRansom:这是 MSVC++ 扩展,由 Armen 本人确认。
标签: c++ list stl lvalue rvalue