2017-07-03 66 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