了解什么是原子约束
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;
对于重载是不明确的,因为分别发生在C
和D
sizeof(T) > 1
原子约束是不等价的。
它们不是因为标准说[templ.constr]:
如果两个原子约束由相同的表达式形成,则它们是相同的[...]
关键是表达式是斜体,指的是语法术语,定义为 [expr.comma]:
表达式:
赋值表达式
表达式,赋值表达式
我不明白为什么原子约束需要涉及赋值。为什么会这样?
我必须承认,上面的代码最好通过概念细化来编写,但我直觉地认为这种编写方式也是正确的。
我不明白为什么原子约束需要涉及赋值。为什么会这样?
强调我的。
它不需要涉及任务。只是表达式是表达式的顶级语法术语,它包含所有其他类型的表达式。sizeof(T) > 1
是一个表达式,sizeof(T) >= 4
也是如此,sizeof(T) > 1 && sizeof(T) >= 4
也是如此。
此语法定义的意思是表达式是赋值表达式或另一个,
赋值表达式的表达式。语法是根据我们认为的运算符优先级分层排列的:
,
的优先级最低,因此语法首先拉出该优先级。这就是当我们递归地将表达式定义为表达式,
赋值表达式时发生的情况=
的优先级次低,所以我们接下来拉出那个优先级。- 然后赋值表达式的语法将我们带到逻辑或表达式(下一个最低优先级(
- 然后是逻辑和表达等。
赋值表达式实际上不必涉及赋值。它实际上是任意复杂的表达。我们所知道的是,它绝对不涉及,
,因为我们已经把那个拉出来了。
与所有这些分开,目的是如果两个原子约束在源文件中实际上是相同的表达式,则它们是相同的。也就是说,约束包容仅适用于concept
。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- 在 C++20 中对概念约束函数进行排序的规则是什么?
- 了解什么是原子约束
- 带有约束的可变参数模板的'requires'表达式的语法是什么?
- 非模板化函数上的约束表达式有什么意义?
- "没有满足这些约束的较小数组对象"是什么意思?
- 函数不受主内存约束的函数所需的复杂性是什么?
- 模拟概念和约束的推荐方法是什么
- 完美前传手的正确"enable_if"约束是什么?
- 概念和模板约束之间有什么区别
- 什么是受约束的模板
- 什么是范围约束资源管理(SBRM) ?