簡體   English   中英

在C ++中輸入安全的數字常量

[英]Type safe numeric constants in C++

假設您開始編碼一個項目,並且某些類型是整數,即您的代碼可能看起來像這樣:

typedef int NumericType;
NumericType a = 0;
NumericType b = 100;

接下來,將CountingType更改為特殊類,出於安全原因,該類沒有從整數隱式轉換。 現在,您必須遍歷所有代碼並更新使用常量的位置。 我已經開始檢查代碼以將其更改為:

typedef specialType NumericType;
NumericType a = static_cast<NumericType>(0);
NumericType b = static_cast<NumericType>(100);

這樣,如果將來再次更改NumericType,則需要更改的代碼將更少。 我開始懷疑這是否是我通常應該遵循的那些規則之一,因為我應該始終使用static_cast常量。

每當我在C ++中使用格式字符串時,我便開始這樣做,這樣,如果我更改類型,我就有機會收到有關sprintf_s調用的警告。

sprintf_s(buffer, 10, "Bob %d", static_cast<int>(bob));

還有另一種用於處理常量和鍵入的模式嗎?

我曾與小組中的其他開發人員交談過,另一個我喜歡的解決方案是使用這樣的代碼:

typedef int NumericType;
NumericType a = NumericType(0);
NumericType b = NumericType(100);

這樣做的好處是,如果我將數字類型切換為NumericType,則只需確保可以使用int構造它,這與允許將其轉換為int有所不同。 也就是說,只要specialType有一個采用intlong的構造函數,則此代碼僅在更新typedef時有效。

typedef specialType NumericType;
NumericType a = NumericType(0);
NumericType b = NumericType(100);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM