Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';我不能约束一个概念吗_C++_C++20_C++ Concepts - Fatal编程技术网

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++模板约束规则,它没有一个。事实上,如果您尝试用这样的类型实例化该变量,它甚至不存在

所以它的意思根本不一样