2016-08-21 96 views
-6

我讀了一個C++教程,說算術運算符返回可能的最小數據類型(即如果添加了2個int,返回類型將是int,如果添加了float和double,則返回類型將是double)。不過,它也表示算術對短褲的操作返回整數。考慮到短褲佔用的內存少於整數,爲什麼會發生這種情況呢?該教程是否錯誤?本教程適用於C++ 11,因此可能在C++ 14中已被棄用?謝謝!爲什麼添加兩條短褲會返回一個int?

+0

「*我閱讀了一個C++教程,它說算術運算符返回可能的最小數據類型*」是否可以在線獲得,以便我們可以查看上下文?這似乎是正確答案的對立面。例如'1 + 2.0;'不返回'int'。 –

+0

2.0是一個雙... –

+0

不要責怪語言,責怪你的建築。 (整數)在c.p.u.s中的算術處理要求操作數是「int」並返回「int」。所以是'short + short'給了'int','short + int'也給了'int'。這是因爲_your_ c.p.u.要求它們是'int'來執行任何算術運算,結果它們被轉換爲'int',執行該操作並將結果返回爲'int'。 –

回答

1

考慮到短內容比內存佔用的內存少,爲什麼會發生?

這是因爲標準是這樣說的。

教程有誤嗎?


從C++ 11標準(注意正常的算術轉換位):

5個表達式

...

9許多期望算術或枚舉類型操作數的二元運算符會以類似的方式導致轉換併產生結果類型。目的是產生一個共同的類型,這也是結果的類型。否則,積分優惠(4.5)應在兩個操作數執行 -

...

:該模式如下被稱爲通常的算術轉換,其被定義。

積分promtions在標準定義爲:

4.5積分優惠

1比boolchar16_tchar32_t,或wchar_t其以外的整數類型的prvalue整數轉換等級(4.13)小於等級int可以轉換爲類型的前值如果int可以表示源類型的所有值;否則,源值可以轉換爲unsigned int類型的值。

作爲每short上述被提升到之前的一些二元運算的int被施加到操作數。

約運營商+-的部分具體地提到,通常的算術轉換都對操作數執行:

5.7加法運算符

1加法運算符+-組左TO-對。通常的算術轉換是針對算術或枚舉類型的操作數執行的。

0

類型int是目標系統的「自然大小」。整數類型小於int在算術表達式中被提升爲int,這樣處理器可以達到最高效率。這些日子可能不是什麼問題,但它仍然是C和C++語言的一部分。

相關問題