3

以下两个版本总是等效的吗?

for (auto&& elem : elems) {
  using E = decltype(elem);

  f(static_cast<E&&>(elem)); // 1
  f(std::forward<E>(elem)); // 2
}
4

1 回答 1

0

的,这些都是一样的。

推演规则auto&&意味着这里E始终是引用类型,所以E&&是与 相同的类型E。这使得static_cast“重新断言”成为如果它具有的xvalue状态。elem

显式编写是不寻常的std::forward<T&&>,但它可以工作,因为这是std::forward<decltype(x)>(x)在作为参数的通用lambda中的工作auto &&x方式(当参数不是左值时)。因此,这也通过设计重新断言了 xvalue 状态。

于 2021-09-04T00:15:13.873 回答