我記得Qt在某些地方保證支持平臺上某些數據類型的大小。是否int
將至少 32位無處不在,並且qint32
將正好 32位到處?或者是其他東西?在Qt支持的每個平臺上,或者只有qint32,int是否保證爲32位?
C++保證int
將是至少16位,和一些Qt的結構如QRect
和QPoint
使用int
內部。我正在開發一個應用程序,這些類型需要32位,我不想重複他們的功能,所以我可以使用更大的類型。
我記得Qt在某些地方保證支持平臺上某些數據類型的大小。是否int
將至少 32位無處不在,並且qint32
將正好 32位到處?或者是其他東西?在Qt支持的每個平臺上,或者只有qint32,int是否保證爲32位?
C++保證int
將是至少16位,和一些Qt的結構如QRect
和QPoint
使用int
內部。我正在開發一個應用程序,這些類型需要32位,我不想重複他們的功能,所以我可以使用更大的類型。
整數類型的大小取決於編譯器。我不認爲有一個保證,即純粹的int
將是一個精確的大小。但是你可以確保你知道這不是你想要的,加入這一行到您的main()
的開頭:
if(sizeof(int) != 4) {
throw std::runtime_error("int is not 32-bit");
}
雖然,據我所知,這在技術上是可能的,int是不是32位的,我我從來沒有見過一個沒有的平臺。 Imagine-char,8bits,short,16bits,int,.. 24bits?它簡直不符合int的層次結構是非32位的。
另外,您可以使用UINT_MAX確認給定編譯器的int大小。
有很多微控制器int是16位。 – Falmarri 2011-01-04 21:49:21
大小(通過使用'sizeof'運算符獲得)和**最小**位數(以便可以表示'UINT_MAX'的值)是兩個不同的事情。請參閱http://stackoverflow.com/q/271076/95735 – 2011-01-04 22:00:05
好的,但'QtGlobal'定義了幾個typedef。例如,qint32的文檔中提到「Typedef for signed int。在Qt支持的所有平臺上,此類型保證爲32位」。所以這意味着'int'在所有支持的平臺上也必須保證爲32位。 – 2010-06-21 19:01:42
我不會得出這個結論。該文檔確保qint32在所有支持的平臺上都是32位大小,而不是相反。 如果他們在將來不得不支持一個平臺,那麼int不是32位,他們將改變該平臺的typedef以反映這一點。 現在已經實現了,你可以假設Qt支持的所有平臺都有32位int。但是,假設是一件非常糟糕的事情。 – 2010-06-21 19:26:38
qint32和朋友的目的是提供一個保證簽名和大小的類型。如果標準類型可以提供,那麼不需要那些Qt類型定義;) 我猜這裏的Qt文檔含糊不清。 – 2010-06-22 07:11:09