簡體   English   中英

是否參考rvalue

[英]Reference for rvalue or not

我想知道下一個代碼是否可以正確使用v和v2變量,或者這些是臨時變量的引用? 換句話說,我可以通過引用捕獲返回的右值嗎? 我認為不,但我的團隊認為另一種方式。

#include <iostream>

struct Foo {
  Foo(Foo&&) = delete;
  Foo& operator=(Foo&&) = delete;

  Foo() {
    std::cout << "Constructor" <<std::endl;
  }
  Foo(const Foo&) {
    std::cout << "Copy Constructor" <<std::endl;
  }
  Foo& operator=(const Foo&) {
    std::cout << "Copy  = Constructor" <<std::endl;
    return *this;
  }
  ~Foo() {
    std::cout << "Destructor" <<std::endl;
  }
};

Foo foo() {
  Foo v;
  return v;
}

int main() {
  const auto& v = foo();
  const auto& v2 = v;
  return 0;
}

是的, 這工作正常 ,其行為已定義。

const auto& v = foo();

這會將臨時綁定到引用。 臨時的生命周期將延長以匹配v的生命周期。 (在rvalue引用之前,在C ++ 03中甚至支持將臨時引用綁定到const引用。)

const auto& v2 = v;

這只是對同一個對象的另一個引用。 它基本上是一個在編譯期間將被淘汰的無操作。 只要v2不會超過v (在這種情況下它不會),那么就沒有問題了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM