2012-08-25 57 views
4

標題有點exxagerated,但我仍然不明白。爲每個變量創建一個新的typedef有什麼意義?

作爲最基本的例子,從time.h採取size_t類型:

爲size_t < ...>在頭文件(中 其他)作爲無符號整數類型定義。

甚至重命名unsigned intsize_t有什麼意義?這樣的事情通常會讓代碼更難理解,因爲它們讓開發人員查找這些類型聲明,即使它是重命名的基本類型,也可能是某個類/結構。然而,我看到這在不同的圖書館中做了很多。

+1

我同意typedefs可以使閱讀代碼變得更加困難,因爲你必須繼續查找什麼是東西。微軟的MFC具有typedefs類型定義的類型。當你發現真正的東西時,你忘了原來的名字是什麼。 – Scooter

+0

在32位系統中size_t是4個字節,在64位系統中size_t將是8個字節,但int仍然是4個字節 – Nulik

回答

14

甚至將unsigned int重命名爲size_t有什麼意義?這樣的事情經常 使更難的代碼來了解

  1. 這使得代碼更容易明白,你馬上就知道什麼對象表示,「這是某種形式的大小的」。將其與裸露的int進行比較。真正的根本型沒有殺到:只要你不知道它的代碼保持便攜式

  2. 今天,它可能是一個unsigned int但也許明天它會是一個unsigned long long。只要你的程序使用權類型是面向未來的

他們讓開發人員尋找那些類型聲明

別看:你會被誘惑做非隨身攜帶的東西。想想你認爲C++ std::string的方式。你知道它做了什麼,你知道如何使用它,但你不知道里面是什麼。

11

size_ t用於確保portabilitysize_t並非總是「unsigned int」,但它是可以表示給定平臺上最大可能對象的大小。

2

對於低級庫如標準C庫,typedef對於提高用戶程序的可移植性非常重要;沒有爭論。

另一方面,在程序中使用別名是一個有趣的問題。基本上有兩個原因:

  • 爲了簡化您的表達,例如,指向函數或agreggate的指針;
  • 來介紹抽象。
0

原因是因爲這些類型可以讓您更好地知道變量代表什麼。而不是隻看到一堆,如std :: size_t,std :: ptrdiff_t等類型告訴你更多關於發生了什麼事情。

相關問題