我試圖找到一些帖子或文章,但我似乎無法找到說明有關不推薦使用枚舉類型
- 很好地解釋了什麼是棄用的枚舉類型,
- 什麼過時的手段,
- 他們是如何申報或發現的
- 他們應該如何處理(或不)
- 他們可能導致什麼問題?
重定向我到一篇有用的文章也會很棒 非常感謝!
我試圖找到一些帖子或文章,但我似乎無法找到說明有關不推薦使用枚舉類型
重定向我到一篇有用的文章也會很棒 非常感謝!
什麼是不推薦使用的枚舉類型?
的術語是模糊的,但意味着某種特定枚舉類型已經被標記爲使用任何棄用:
一個編譯器特有的符號,這樣就會出現警告或錯誤,如果他們」重新使用,和/或
沒有任何技術執行的文檔(無論是例如大規模的企業「編碼標準」要求只使用C++ 11枚舉類,還是特定的枚舉類型的API特定註釋已棄用)
棄用的含義是什麼?
該功能可能會在系統的後期版本中刪除,通常是因爲它被認爲較差(無論是現有的替代方案,還是可維護性,性能,穩健性等)或不重要。
它們是如何聲明或發現的?
如果棄用正由編譯器執行的,那麼它將被必須包括在相同的翻譯單元作爲enum
類型的:它可以是在相同的標題,或在一般的「deprecation.h 「頭,等等。這裏是爲了一個共同的編譯器的幾個例子:
GCC:enum
X [{
... }
] __attribute__ ((deprecated));
enum
X{
E1__attribute__((deprecated))
[=
值] [,
...] };
又該如何處理,(或沒有)
如果可以的話,你應該調查爲什麼他們被棄用和替代品是什麼,並使用它們來改變代碼以避免它們。
他們可能導致什麼問題?
他們造成的直接問題是您的編譯器可能會產生警告或錯誤。
他們很可能是反對,因爲它不是最好的主意,用他們甚至與當前軟件 - 相關的功能可能是低效的,越野車等。例如,給定enum Image_Format { GIF, PNG, JPEG, SVG };
,GIF
可以在系統中推薦使用,因爲PNG已被證明對系統的用戶更好 - 例如也許是因爲它支持更好的顏色深度,更準確地保留顏色,或者SVG
可能會被棄用,因爲有些客戶端被發現使用的Web瀏覽器不會顯示它們,JPEG
可能會被棄用,因爲已知系統中的圖像aren自然攝影圖像和格式會導致視覺效果較差的結果,儘管壓縮文件較大,處理速度較慢並且內存使用率較高 - 可能導致不推薦使用的許多動機。
一個更大但並非直接的問題是,它們可能隨着軟件「子系統」提供它們的下一個版本而消失,所以如果你不移植舊代碼並避免使用它們創建新代碼,那麼你的軟件將會必須先解決,然後才能使用該子系統的更新。
謝謝你的答案,這個術語是不明確的,因爲我對這個主題知之甚少 – thahgr
@thahgr:當然......沒有任何傷害......我希望你現在有足夠的洞察力,讓人們明確地認識到下次你的意思聽到它,並按照他們的回答....乾杯。 –
過時的手段 -
您可以使用此功能在目前最新的穩定版本,但該功能將在未來的版本中刪除,但沒有提及。
它們由創建它們的庫或SDK標記。有些語言使用attirubutes來標記棄用。像C#使用 - [Obsolete]
屬性,我不確定C++,不知道它們用於標記已棄用的內容。
它們可以在將來的任何版本中刪除。因此,如果您使用它們,您的代碼或程序可能無法在將來的更新中使用,因爲該功能可能在未來的更新中被刪除。
我從來沒有聽說過確切的措辭,但實際上這是一個enum
(類型)標記爲已棄用。
不贊成意味着某些價值,功能甚至模塊被標記爲現在已過時或被替換。它仍然存在與舊代碼的兼容性,但除非真的必須,否則不應該在新代碼中使用它。請記住它可能會在未來的版本中刪除。
不幸的是,我不知道有任何真正的標準/跨平臺方式來做到這一點。 The question linked in the comments有一些關於這方面的例子。如果您的編譯器支持某些特殊標記(#pragma
指令或某種屬性),如果標記正確,它應該發出警告或類似的警告。
如上所述,儘量避免標記爲棄用的東西。通常會有一些替代品或至少提示未來要做什麼/如何做。例如,如果您試圖在MSVC中使用某些標記爲已棄用的標準庫函數,則編譯器通常會告訴您要使用哪個函數。
現在,它們很可能不會導致任何問題,但是您可能無法利用某些庫提供的所有功能。例如,MSVC中的經典sprintf()
從未檢查寫入的緩衝區長度。如果你嘗試使用它,你會得到一個警告,要求你改用sprintf_s()
,這樣做會進行安全檢查。你不必這樣做(它被標記爲已棄用但未被刪除),但你基本上錯過了。不要忘記,如果廢棄的東西最終被刪除,您的代碼可能會中斷(並且稍後需要重寫)。
鏈接的問題是關於枚舉數(枚舉值)。要拋棄枚舉類型,您可以使用C++ 14標準的[[deprecated]]屬性定義它:'enum class [[deprecated]] colors {red,green,blue};'。 – Potatoswatter
噢,不錯,另一種添加關鍵字的方法?爲什麼它不能被「棄用」? :(@Potatoswatter所以這可用於所有自定義類型,但不是(枚舉)元素? – Mario
是的,屬性遍佈語法,但統計員沒有[[]]得到任何的愛 – Potatoswatter
可能與http://stackoverflow.com/q/5488057/1938163 –
相關您能提供一些指向這些帖子的鏈接嗎?目前還不清楚你在說什麼。 – juanchopanza
*棄用*是不錯的方式*不要再使用我*不破壞向後兼容性 – blgt