我正在阅读ODR-use,我遇到了这个问题:
在潜在评估的表达式ex中的变量x是odr-used 除非以下两种情况都属实:
什么是可能评估的表达式?
更新:我可能只是在向下滚动页面时找到答案:
在上面的定义中,潜在评估意味着表达 不是未评估的操作数(或其子表达式),例如 sizeof的操作数和表达式e的一组潜在结果是 出现在e中的一组(可能是空的)id表达式, 合并如下:
但不确定这一般是什么意思+我还是不理解他们的解释。另外,为什么要说潜在结果而不仅仅是结果?
答案 0 :(得分:4)
简单来说,潜在评估正是它所说的:表达式有机会被评估。这包括除sizeof(ex)
,decltype(ex)
,typeid(ex)
和noexcept(ex)
之外的任何内容。除了在这些上下文中, ex 可能会被评估。
关于odr-used,它表示仅当 ex 被潜在评估时, x 被认为是odr-used。也就是说, 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