9
  • list'send()は、past-the-end イテレータのコピーを返しますよね?
  • したがって、list.end()右辺値ですか?
  • -- list iterator にオーバーロードされた operator-function は非 const 参照を取りますよね?
  • 右辺値を非 const 参照にバインドすることはできませんよね?

では、どうして

std::list<int> lst;
// ... 
--l.end();` 

コンパイル?

正しく指摘されたように、私の 3 番目のポイントは必ずしも正しくありません。しかし、コンパイルもできるこのコードはどうでしょうか?

struct A{};

void f(A&)
{

}
A a()
{
    return A();
}

int main()
{
    f(a());
}
4

1 に答える 1

12
  • -- list iterator にオーバーロードされた operator-function は非 const 参照を取りますよね?

この点は間違っています。はoperator--メンバー関数であり、メンバー関数は一時的に呼び出すことができます。このメンバー関数に引数としてオブジェクトを渡さないでください。そのため、右辺値を非 const 参照にバインドするという問題は、そもそも発生しません。


編集 (右辺値を に渡すf(A&){}) に関しては、非標準の拡張機能です。Microsoft Compiler を使用していると思います。私の意見では、この非標準の拡張機能が含まれていることがわかっているからです。

于 2013-02-27T16:40:13.513 に答える