1

以下が (少なくとも gcc 4.8 によれば) C++11 で合法である理由を理解するのに苦労しています:

// This class manages a non-copyable resource.
struct B {
  B();
  B(B &&) { /* logging, etc., to verify if needed. */ }
private:
  B(B const &);
  B const &operator=(B const &);
};

B bar() {
  B b;
  // This is apparently allowed via the move constructor.
  return b;
};

int main() {
  // From this "side" of the call as well.
  B b1 = bar();
  B b2{bar()};
}

どのようなコンテキストで移動コンストラクターが許可されているか、言語によって実際に優先されていますか? 一時的な戻り値は移動する (そしてその内容を破棄する) のは公平に思えますが、移動を静かに使用できるすべての場所のコア言語規則を見つけたいと思います。ありがとう!

4

2 に答える 2