C++ 为什么可以';我不能约束一个概念吗
不允许约束这样的概念:C++ 为什么可以';我不能约束一个概念吗,c++,c++20,c++-concepts,C++,C++20,C++ Concepts,不允许约束这样的概念: template<typename T> concept A = expr_1; template<A T> concept B = expr_2; // error template<typename T> concept A = expr_1; template<typename T> concept B = A<T> && expr_2; // ok 模板 概念A=表达式1;
template<typename T>
concept A = expr_1;
template<A T>
concept B = expr_2; // error
template<typename T>
concept A = expr_1;
template<typename T>
concept B = A<T> && expr_2; // ok
模板
概念A=表达式1;
模板
概念B=expr_2;//错误
然而,似乎同样的结果总是可以这样实现的:
template<typename T>
concept A = expr_1;
template<A T>
concept B = expr_2; // error
template<typename T>
concept A = expr_1;
template<typename T>
concept B = A<T> && expr_2; // ok
模板
概念A=表达式1;
模板
概念B=A&&expr\u 2;//好啊
如果第一个版本总是可以重写为第二个版本,那么不允许使用第一个版本的原因是什么?从功能设计的角度来看,用户不必在多个地方查找相同的信息
概念
对其模板参数定义了一系列约束。这些约束列在=
符号之后;这就是他们的重点。因此,用户应该能够通过找到=
符号并查看其后面的表达式来查看有关概念的所有信息
您的方式意味着我必须查找最多三个位置:模板参数定义的约束、模板头的requires
子句(现在必须可以,因为约束参数就是这样定义的),以及=
符号后面的表达式
既然你能正确地把它拼出来,为什么还要为增加的复杂性而烦恼呢?代码被读的次数比被写的次数多,所以我们应该倾向于简单的阅读而不是方便的写作
从特性定义的角度来看,概念
只是一个constexpr静态bool
变量,附加了一些特殊功能。这就是它使用=
符号定义其值的原因
约束模板意味着,如果违反约束,则此模板定义不存在
因此,给定模板概念B
,当A
为false
时B
的值是多少?根据普通C++模板约束规则,它没有一个。事实上,如果您尝试用这样的类型实例化该变量,它甚至不存在
因此,它的含义根本不一样。从功能设计的角度来看,用户不必在多个地方查找相同的信息
概念
对其模板参数定义了一系列约束。这些约束列在=
符号之后;这就是他们的重点。因此,用户应该能够通过找到=
符号并查看其后面的表达式来查看有关概念的所有信息
您的方式意味着我必须查找最多三个位置:模板参数定义的约束、模板头的requires
子句(现在必须可以,因为约束参数就是这样定义的),以及=
符号后面的表达式
既然你能正确地把它拼出来,为什么还要为增加的复杂性而烦恼呢?代码被读的次数比被写的次数多,所以我们应该倾向于简单的阅读而不是方便的写作
从特性定义的角度来看,概念
只是一个constexpr静态bool
变量,附加了一些特殊功能。这就是它使用=
符号定义其值的原因
约束模板意味着,如果违反约束,则此模板定义不存在
因此,给定模板概念B
,当A
为false
时B
的值是多少?根据普通C++模板约束规则,它没有一个。事实上,如果您尝试用这样的类型实例化该变量,它甚至不存在
所以它的意思根本不一样