C ++模板变量和参数包扩展

时间:2019-02-15 21:22:31

标签: c++ c++17

在libstdc ++变体源中,它定义了以下模板变量(从_Traits结构中取出),

template<typename... _Types>
  static constexpr bool _S_copy_ctor = 
    (is_copy_constructible_v<_Types> && ...);

“ &&”在这里做什么?

我试图取出无法编译的'&&',那么两者有什么区别?

  static constexpr bool _S_copy_ctor = (is_copy_constructible_v<_Types> && ...);
  static constexpr bool _S_copy_ctor = (is_copy_constructible_v<_Types>    ...);

1 个答案:

答案 0 :(得分:3)

在这种情况下,&&是一个简单的逻辑AND 运算符,称为fold operator

它用于展开基于typename... _Types的表达式。示例:

_Types推导为int, double, float,然后表达式:

(is_copy_constructible_v<_Types> && ...)

将展开(展开)为:

(is_copy_constructible_v<int> &&
 is_copy_constructible_v<double> && 
 is_copy_constructible_v<float>)

您不能简单地擦除&&。有用例。