我讀了一個C++教程,說算術運算符返回可能的最小數據類型(即如果添加了2個int,返回類型將是int,如果添加了float和double,則返回類型將是double)。不過,它也表示算術對短褲的操作返回整數。考慮到短褲佔用的內存少於整數,爲什麼會發生這種情況呢?該教程是否錯誤?本教程適用於C++ 11,因此可能在C++ 14中已被棄用?謝謝!爲什麼添加兩條短褲會返回一個int?
-6
A
回答
1
考慮到短內容比內存佔用的內存少,爲什麼會發生?
這是因爲標準是這樣說的。
教程有誤嗎?
號
從C++ 11標準(注意正常的算術轉換位):
5個表達式
...
9許多期望算術或枚舉類型操作數的二元運算符會以類似的方式導致轉換併產生結果類型。目的是產生一個共同的類型,這也是結果的類型。否則,積分優惠(4.5)應在兩個操作數執行 -
...
:該模式如下被稱爲通常的算術轉換,其被定義。
積分promtions在標準定義爲:
4.5積分優惠
1比
bool
,char16_t
,char32_t
,或wchar_t
其以外的整數類型的prvalue整數轉換等級(4.13)小於等級int
可以轉換爲類型的前值如果int
可以表示源類型的所有值;否則,源值可以轉換爲unsigned int
類型的值。
作爲每short
上述被提升到之前的一些二元運算的int
被施加到操作數。
約運營商+
和-
的部分具體地提到,通常的算術轉換都對操作數執行:
5.7加法運算符
1加法運算符
+
和-
組左TO-對。通常的算術轉換是針對算術或枚舉類型的操作數執行的。
0
類型int
是目標系統的「自然大小」。整數類型小於int
在算術表達式中被提升爲int
,這樣處理器可以達到最高效率。這些日子可能不是什麼問題,但它仍然是C和C++語言的一部分。
相關問題
- 1. C#按位操作短褲 - 爲什麼投射到一個int?
- 2. 兩條短褲加在一起不等於短?
- 3. 爲什麼在lambdas中隱式捕獲const int(或短褲)?
- 4. 爲什麼string :: compare返回一個int?
- 5. 爲什麼+「1」返回一個int?
- 6. 最簡單的方法來將兩個短褲合併爲一個int
- 7. 將兩條短褲放在一個字節數組中
- 8. 爲什麼這會返回一個NoneType?
- 9. 爲什麼Scrapy會返回一個Iframe?
- 10. 爲什麼在nVelocity中添加兩個值總是返回零?
- 11. 短加短是一個int
- 12. 爲什麼InputStream read()返回一個int而不是一個short?
- 13. 當一個短int []自動轉換爲long int []時會發生什麼?
- 14. 爲什麼GetVolumeInformation爲序列號返回一個int值?
- 15. 當我添加一個None值時,爲什麼patsy會返回其他列?
- 16. 它爲什麼會在返回一個對象的方法中返回一個int?
- 17. 爲什麼這個條件返回true?
- 18. 乘以一個雙值與兩個短褲的分配結果
- 19. 爲什麼request.env ['REMOTE_ADDR']返回兩個IP?
- 20. 爲什麼XMLHttpRequest返回兩個值?
- 21. 液體短褲?
- 22. 爲什麼它會一直返回false?
- 23. 爲什麼waveInGetNumDevs會一直返回0?
- 24. 爲什麼它會一直返回「null」?
- 25. 爲什麼這會一直返回-99?
- 26. 爲什麼Foo.first會返回最後一條記錄?
- 27. CStringArray :: GetAt(int index)返回一個常量。爲什麼?
- 28. 爲什麼編譯器假定malloc返回一個int?
- 29. 爲什麼我的方法不返回一個int?
- 30. 爲什麼HttpException.GetHttpCode()返回一個int而不是System.Net.HttpStatusCode?
「*我閱讀了一個C++教程,它說算術運算符返回可能的最小數據類型*」是否可以在線獲得,以便我們可以查看上下文?這似乎是正確答案的對立面。例如'1 + 2.0;'不返回'int'。 –
2.0是一個雙... –
不要責怪語言,責怪你的建築。 (整數)在c.p.u.s中的算術處理要求操作數是「int」並返回「int」。所以是'short + short'給了'int','short + int'也給了'int'。這是因爲_your_ c.p.u.要求它們是'int'來執行任何算術運算,結果它們被轉換爲'int',執行該操作並將結果返回爲'int'。 –