1. ホーム
  2. c++

[解決済み] std::refの使用はどのような場合に必要ですか?

2022-03-07 14:52:12

質問

考えてみてください。

std::tuple<int , const A&> func (const A& a) 
{
  return std::make_tuple( 0 , std::ref(a) );
}

std::ref 正しいコード、移植性の高いコードを書くために必要ですか?(なくても問題なくコンパイルできます。)

背景を説明します。

を削除すると std::ref は、警告を出さずにうまくビルドされます ( g++-4.6 -Wall ) が、正しく実行されません。

の定義に興味がある場合は A :

struct A {
  std::array<int,2> vec;
  typedef int type_t;

  template<typename... OPs,typename... VALs>
  A& operator=(const std::pair< std::tuple<VALs...> , std::tuple<OPs...> >& e) {
    for( int i = 0 ; i < vec.size() ; ++i ) {
      vec[i] = eval( extract(i,e.first) , e.second );
    }
  }
};

解決方法は?

  • make_tuple(0, a) を作ります。 tuple<int, A> .
  • make_tuple(0, ref(a)) を作ります。 tuple<int, reference_wrapper<A>> .
  • また、次のように言うこともできます。 tuple<int, A&> t(0, a); で作れないタプルに対して make_tuple を使用するか、または std::tie .