簡體   English   中英

在C ++ 11類型推斷期間,有哪些規則可以控制優先級?

[英]What are the rules governing precedence during C++11 type inference?

有關浮點/雙精度類型的C ++ 11類型推斷中的優先級的規則是什么,例如,從包含多個類型的表達式推斷時,如下所示:

auto var = float(1) * double(1);

結果將是double 這稱為floating point promotion

從標准, ISO 14882:2011,4.6 浮點促銷

1 float類型的prvalue可以轉換為double類型的prvalue。 該值保持不變。
2此轉換稱為浮點促銷。


正如@sftrabbit所述,在5.表達式中 ,新標准中的第9段:

許多期望算術或枚舉類型的操作數的二元運算符會以類似的方式引起轉換並產生結果類型。 目的是產生一個通用類型,它也是結果的類型。

這種模式稱為通常的算術轉換,定義如下:

- 如果任一操作數具有作用域枚舉類型(7.2),則不執行任何轉換; 如果另一個操作數的類型不同,則表達式格式不正確。
- 如果任一操作數的類型為long double,則另一個操作數應轉換為long double。
- 否則,如果任一操作數為double,則另一個操作數應轉換為double。
- 否則,如果任一操作數是浮點數,則另一個操作數應轉換為浮點數。
- 否則,應對兩個操作數執行整數促銷(4.5)。

類型推斷不會添加任何新內容,“=”右側的表達式將一如既往地進行計算,然后將其類型用於“auto”。

當你看到'auto var'和'auto&var'之間的差異時,它會更有趣,但這不是你的問題。

答案取決於有問題的類型。 在您的具體示例中,標准保證sizeof(double) >= sizeof(float)因此得到的double * float類型將始終為double (這是從C語言繼承的規則,並且在源自C的許多其他語言中通常是相同的)

使用auto關鍵字初始化變量時,將確定初始化表達式的結果類型 - 無論是函數返回,計算還是decltype等。類型取決於您可用於類型的隱式和顯式轉換'正在使用。

暫無
暫無

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

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