知りたいこと。
  • std::forwardって結局なにをしてくれるのさ?
  • f(T&&)って結局なに?

#include <iostream>
#include <utility>
#include <boost/current_function.hpp>

template <typename T>
inline void f(T&& x) {
  std::cout << BOOST_CURRENT_FUNCTION << "\n";
}

int main(int argc, char* argv[]) {
  int i = 42;
  int& ref = i;
  int const& cref = i;

  f(42);
  f(i);
  f(std::move(i));
  f(ref);
  f(cref);

  return 0;
}

実行結果


void f(T&&) [with T = int]
void f(T&&) [with T = int&]
void f(T&&) [with T = int]
void f(T&&) [with T = int&]
void f(T&&) [with T = const int&]

N2951


適当に日本語にしてみても判りづらい。

  1. lvalueはlvalueとして転送しなければならない。
  2. rvalueはrvalueとして転送しなければならない。
  3. rvalueをlvalueとして転送してはならない。
  4. 制約が厳しいcv制約式から、制約が緩いcv制約式に転送してはならない。
  5. 面倒くさいから無視。
  6. これも無視。

継承とか変換とかを無視すると、N2951の醍醐味がなくなるような気がするけど。それはさておき、lvalueはlvalueに、rvalueはrvalueに、あとconstが外れたりしちゃダメよ、と理解した。volatileは知らない。

このページへのコメント

ZCILEW <a href="http://wbwfkdeunfyb.com/">wbwfkdeunfyb</a>, [url=http://ktbtmfmgxvdq.com/]ktbtmfmgxvdq[/url], [link=http://ttlregipxxvl.com/]ttlregipxxvl[/link], http://vqgaeebxgdjx.com/

0
Posted by xegzaxneco 2013年11月14日(木) 11:53:22 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます