2017-07-03 57 views
0

我念叨ODR-use和我遇到这样的:什么是可能评估的表达式?

在潜在评估表达的前一个变量x ODR使用的 除非以下两个条件都为真:

什么是潜在评估表达

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

在上面的定义中,潜在地评估指表达 不是未计算的操作数(或它的子表达式),如 操作数的sizeof和一组的表达式e的可能的结果是 出现Ë内的ID表达式, 如下组合的(可能为空):

但不知道这是什么米总的来说+我真的不明白他们的解释。另外,为什么说潜在结果而不是只是结果

回答

3

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

关于ODR使用的,这意味着X被认为是只有当潜在地评估ODR使用。也就是说,x需要使用的必要条件是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 
+0

是“没有潜在评估”等同于“未评估的上下文”? – bolov

+0

@bolov [我会这么猜](https://stackoverflow.com/questions/35088599/what-are-unevaluated-contexts-in-c)。可以肯定的是,我不知道“未评估的上下文”出现在哪里,所以我不能100%确定。它不出现在[[expr](http://eel.is/c++draft/expr#def:unevaluated_operand)]和[[basic.def.odr](http://eel.is/) C++ draft/basic.def.odr)] –

+0

@PasserBy搜索未评估的操作数。 – skypjack