2010-06-21 19 views
5

我記得Qt在某些地方保證支持平臺上某些數據類型的大小。是否int至少 32位無處不在,並且qint32正好 32位到處?或者是其他東西?在Qt支持的每個平臺上,或者只有qint32,int是否保證爲32位?

C++保證int將是至少16位,和一些Qt的結構如QRectQPoint使用int內部。我正在開發一個應用程序,這些類型需要32位,我不想重複他們的功能,所以我可以使用更大的類型。

回答

6

整數類型的大小取決於編譯器。我不認爲有一個保證,即純粹的int將是一個精確的大小。但是你可以確保你知道這不是你想要的,加入這一行到您的main()的開頭:

if(sizeof(int) != 4) { 
    throw std::runtime_error("int is not 32-bit"); 
} 
+0

好的,但'QtGlobal'定義了幾個typedef。例如,qint32的文檔中提到「Typedef for signed int。在Qt支持的所有平臺上,此類型保證爲32位」。所以這意味着'int'在所有支持的平臺上也必須保證爲32位。 – 2010-06-21 19:01:42

+0

我不會得出這個結論。該文檔確保qint32在所有支持的平臺上都是32位大小,而不是相反。 如果他們在將來不得不支持一個平臺,那麼int不是32位,他們將改變該平臺的typedef以反映這一點。 現在已經實現了,你可以假設Qt支持的所有平臺都有32位int。但是,假設是一件非常糟糕的事情。 – 2010-06-21 19:26:38

+1

qint32和朋友的目的是提供一個保證簽名和大小的類型。如果標準類型可以提供,那麼不需要那些Qt類型定義;) 我猜這裏的Qt文檔含糊不清。 – 2010-06-22 07:11:09

0

雖然,據我所知,這在技術上是可能的,int是不是32位的,我我從來沒有見過一個沒有的平臺。 Imagine-char,8bits,short,16bits,int,.. 24bits?它簡直不符合int的層次結構是非32位的。

另外,您可以使用UINT_MAX確認給定編譯器的int大小。

+0

有很多微控制器int是16位。 – Falmarri 2011-01-04 21:49:21

+0

大小(通過使用'sizeof'運算符獲得)和**最小**位數(以便可以表示'UINT_MAX'的值)是兩個不同的事情。請參閱http://stackoverflow.com/q/271076/95735 – 2011-01-04 22:00:05

相關問題