什么是潜在评估表达式?

What is a potentially-evaluated expression?

本文关键字:表达式 评估 什么      更新时间:2023-10-16

我正在阅读有关ODR使用的信息,我遇到了这个:

潜在计算表达式 ex 中的变量 x 是 ODR 使用的 除非满足以下两个条件:

什么是潜在评估表达式

更新:我可能只是在向下滚动页面时找到答案:

在上述定义中,潜在评估是指表达式 不是未计算的操作数(或其子表达式(,例如 大小的操作数和表达式 e 的一组潜在结果为 出现在 e 中的一组(可能是空的(id 表达式, 组合如下:

但不确定这是否是一般的意思+无论如何我真的不明白他们的解释。另外,为什么说潜在的结果而不仅仅是结果

用最简单的术语来说,潜在评估正是它所说的:表达式有机会被评估。这包括除sizeof(ex)decltype(ex)typeid(ex)noexcept(ex)以外的任何内容。除了在这些情况下,ex是潜在的评估。

关于 odr 使用,这意味着x只有在潜在评估ex时才被视为 odr 使用。也就是说,x被odr使用的必要条件是ex必须被潜在地评估。这可以实现诸如

struct S
{
static float f;  // declared but not defined
};
decltype(&S::f) p1;  // since &S::f isn't potentially evaluated, this is well-formed
float* p2 = &S::f;  // this is ill-formed