簡體   English   中英

什么是具有靜態存儲持續時間的臨時對象

[英]What is a temporary object with static storage duration

靈感來自這個答案 ,來自[expr.const]

常量表達式是glvalue核心常量表達式,它指的是一個實體,它是常量表達式的允許結果(如下所定義),或者是一個prvalue核心常量表達式,其值滿足以下約束:

  • 如果值是類類型的對象,則引用類型的每個非靜態數據成員引用一個實體,該實體是常量表達式的允許結果,

  • 如果值是指針類型,則它包含具有靜態存儲持續時間的對象的地址,超過此類對象末尾的地址([expr.add]),函數的地址或空指針值,以及

  • 如果值是類或數組類型的對象,則每個子對象都滿足這些值的約束。

如果實體是具有靜態存儲持續時間對象,則該實體是常量表達式的允許結果,該對象不是臨時對象,或者是其值滿足上述約束的臨時對象 ,或者它是函數。

什么是具有靜態存儲持續時間的臨時對象? 我是否遺漏了某些東西,或者說對象是暫時的並且具有靜態存儲持續時間是矛盾的嗎?

來自[basic.stc.static]的定義

所有沒有動態存儲持續時間,沒有線程存儲持續時間且不是本地的變量都具有靜態存儲持續時間。 這些實體的存儲應持續到程序的持續時間

僅適用於變量

[basic.stc] / 1告訴我們:

存儲持續時間是對象的屬性,它定義包含對象的存儲的最小潛在生命周期。

所以每個對象都有一個存儲時間。 此外,第2段說:

靜態,線程和自動存儲持續時間與聲明(6.1)引入的對象相關聯, 並由實現(15.2)隱式創建

強調補充說。 請注意,第15.2節是[class.temporary]:臨時對象的規則。

因此,我們可以得出結論,臨時對象具有存儲持續時間。 我們可以得出結論,臨時工具必須具有其中一個存儲持續時間。 實際上,標准中有許多引用“變量或臨時對象”及其存儲持續時間。

然而,盡管這清楚地表明臨時對象具有這些存儲持續時間之一......標准從未真正說明它們具有的存儲持續時間。 [class.temporary]沒有聲明說綁定到引用的臨時文件具有其引用的存儲持續時間。 而[basic.stc]對靜態,自動和線程局部持續時間的解釋總是說明變量。

所以我會說這是措辭中的缺陷。 它似乎很清楚,該標准預計的臨時有合適的存儲時間; 有多個地方標准談論變量或臨時對象的存儲持續時間。 但它從未說明他們實際擁有的存儲時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM