什么是可能被评估的表达式?

时间:2017-07-03 19:03:23

标签: c++

我正在阅读ODR-use,我遇到了这个问题:

  

在潜在评估的表达式ex中的变量x是odr-used   除非以下两种情况都属实:

什么是可能评估的表达式

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

  

在上面的定义中,潜在评估意味着表达   不是未评估的操作数(或其子表达式),例如   sizeof的操作数和表达式e的一组潜在结果是   出现在e中的一组(可能是空的)id表达式,   合并如下:

但不确定这一般是什么意思+我还是不理解他们的解释。另外,为什么要说潜在结果而不仅仅是结果

1 个答案:

答案 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