了解什么是原子约束
Understanding what atomic constraints are
我刚刚从 Saar Raz 的演示视频中了解到以下限制条件:
template <typename T>
concept C = sizeof(T) > 1;
template <typename T>
concept D = sizeof(T) > 1 && sizeof(T) >= 4;
对于重载是不明确的,因为原子约束 sizeof(T) > 1
分别出现在 C
和 D
处,不等价。
他们不是因为标准说 [templ.constr]:
Two atomic constraints are identical if they are formed from the same expression [...]
关键是expression是斜体,指的是语法术语,定义为[expr.comma]:
expression:
assignment-expression
expression , assignment-expression
我不明白为什么原子约束需要涉及赋值。为什么会这样?
我必须承认上面的代码最好是通过概念细化来写的,但我直觉地认为这种写法也是正确的。
I don't understand why an atomic constraint needs to involve an assignment. Why is so?
强调我的。
不需要涉及作业。只是 expression 是表达式的顶级语法术语,它包含所有其他类型的表达式。 sizeof(T) > 1
是一个 表达式 ,sizeof(T) >= 4
也是,sizeof(T) > 1 && sizeof(T) >= 4
.
这个语法定义的意思是 expression 是 assignment-expression 或另一个 expression ,
赋值表达式。语法是根据我们认为的 operator precedence:
分层排列的
,
具有最低的优先级,因此语法首先将其拉出。这就是当我们将 expression 递归定义为 expression ,
assignment-expression[= 时发生的情况62=]
=
具有次低的优先级,因此我们接下来将其拉出。
- 然后 assignment-expression 的语法将我们带到 logical-or-expression(下一个最低优先级)
- 然后逻辑与表达式,等等
赋值表达式实际上不需要涉及赋值。它实际上是任意一种复杂的表达式。我们所知道的是,它绝对不涉及 ,
,因为我们已经把那个去掉了。
与所有这些不同的是,如果两个原子约束在源文件中实际上是相同的表达式,则它们是相同的。即约束包含.
我刚刚从 Saar Raz 的演示视频中了解到以下限制条件:
template <typename T>
concept C = sizeof(T) > 1;
template <typename T>
concept D = sizeof(T) > 1 && sizeof(T) >= 4;
对于重载是不明确的,因为原子约束 sizeof(T) > 1
分别出现在 C
和 D
处,不等价。
他们不是因为标准说 [templ.constr]:
Two atomic constraints are identical if they are formed from the same expression [...]
关键是expression是斜体,指的是语法术语,定义为[expr.comma]:
expression:
assignment-expression
expression , assignment-expression
我不明白为什么原子约束需要涉及赋值。为什么会这样?
我必须承认上面的代码最好是通过概念细化来写的,但我直觉地认为这种写法也是正确的。
I don't understand why an atomic constraint needs to involve an assignment. Why is so?
强调我的。
不需要涉及作业。只是 expression 是表达式的顶级语法术语,它包含所有其他类型的表达式。 sizeof(T) > 1
是一个 表达式 ,sizeof(T) >= 4
也是,sizeof(T) > 1 && sizeof(T) >= 4
.
这个语法定义的意思是 expression 是 assignment-expression 或另一个 expression ,
赋值表达式。语法是根据我们认为的 operator precedence:
,
具有最低的优先级,因此语法首先将其拉出。这就是当我们将 expression 递归定义为 expression,
assignment-expression[= 时发生的情况62=]=
具有次低的优先级,因此我们接下来将其拉出。- 然后 assignment-expression 的语法将我们带到 logical-or-expression(下一个最低优先级)
- 然后逻辑与表达式,等等
赋值表达式实际上不需要涉及赋值。它实际上是任意一种复杂的表达式。我们所知道的是,它绝对不涉及 ,
,因为我们已经把那个去掉了。
与所有这些不同的是,如果两个原子约束在源文件中实际上是相同的表达式,则它们是相同的。即约束包含