在线文档教程
C++
应用 | Utilities

std::disjunction

STD::断开

Defined in header
template<class... B> struct disjunction;(1)(since C++17)

形成逻辑分离类型性状B...有效地执行一个逻辑或一系列的特征。

专业化std::disjunction<B1, ..., BN>有一个公共的和明确的基础,也就是说。

  • 如果sizeof...(B) == 0,,,std::false_type;否则

  • 第一类BiB1, ..., BN对此bool(Bi::value) == true,或BN如果没有这样的类型。

基类的成员名称,但disjunctionoperator=,则不隐藏,并且可以在disjunction...

断开是短路的:如果有模板类型参数。Bi带着bool(Bi::value) != false,然后实例化disjunction<B1, ..., BN>::value不需要实例化Bj::value为j > i...

模板参数

B...-every template argument Bi for which Bi::value is instantiated must be usable as a base class and define member value that is convertible to bool

辅助变量模板

template inline constexpr bool disjunction_v = disjunction::value;(since C++17)

可能的实施

模板<class...>结构分离:std::false[医]类型{};模板<class B1>结构分离<B1>:B1{};模板<类B1,类...。结构分离<B1,Bn...>:std::条件[医]t<bool%28B1::值%29,B1,分离<Bn.>>{};

*。

注记

...的专业化disjunction不一定是从任何一方继承的std::true_type或std::false_type*它只是继承了第一个B谁的::value,显式转换为bool,是真的,或者从最后的B,当它们全部转换为假。例如,std::disjunction<std::integral_constant<int, 2>,std::integral_constant<int, 4>>::value是2...

短路实例化disjunction从折叠表达式:折叠表达式,如(... || Bs::value)实例化每个B在Bs,同时std::disjunction_v<Bs...>一旦确定了值,就停止实例化。如果后面的类型实例化成本很高,或者使用错误的类型实例化会导致硬错误,则这尤其有用。

二次

#include <iostream> #include <type_traits> using result0 = std::disjunction<std::bool_constant<false>, std::bool_constant<false>, std::bool_constant<false>>; using result1 = std::disjunction<std::bool_constant<true>, std::bool_constant<false>, std::bool_constant<false>>; int main() { std::cout << std::boolalpha; std::cout << result0::value << '\n'; std::cout << result1::value << '\n'; }

二次

产出:

二次

false true

二次

另见

negation (C++17)logical NOT metafunction (class template)
conjunction (C++17)variadic logical AND metafunction (class template)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/type/disnosis