gpt4 book ai didi

c++ - 为什么 --list.end() 编译?

转载 作者:可可西里 更新时间:2023-11-01 16:35:45 25 4
gpt4 key购买 nike

  • 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com