在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> ...);
答案 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>)
您不能简单地擦除&&
。有用例。