2013-06-29 45 views
1

看來我找到了一些常量的類型,我宣佈(通常是整數,但像琴絃偶爾其他東西)是不是正在使用它在上下文中的理想型,需要轉換或導致編譯器警告隱式轉換。C++所以在比較經常基地挑選一個類型恆定

E.g.在一段代碼中,我有類似下面的內容,並得到了簽名/未簽名的比較問題。

static const int MAX_FOO = 16; 

... 

if (container.size() > MAX_FOO) {...} 

我一直在想,只是一直允許使用一個給定不變的最小/最基本的類型(例如字符,無符號的字符,爲const char *等,而不是說INT,爲size_t和std ::字符串),但想知道這是否是一個好主意,並且如果有一些地方可能會是一個非常糟糕的主意?例如代碼使用「自動」關鍵字(或者可能是模板)得到一個太小的類型和溢出似乎是一個安全的操作?

+1

尺寸一般是無符號的,這就是爲什麼有既是無符號'size_t'和簽名的'ssize_t'。 –

+0

對於容器大小,我酌情使用'auto'或'ContainerType :: size_type'。 –

回答

1

尋找可以保持初始值的最小類型是一個壞習慣。這會導致溢出。

總是代碼爲最一般的(根據墨菲定律是最差的)情況。隨着模板泛化,最糟糕的情況會變得更糟。準備好離奇類型的溢出,並避免負數,而無符號類型在附近。

std::size_t對於大小或什麼長度,你提到的原因的最佳選擇。但是減去指針,你會得到一個std::ptrdiff_t。就我個人而言,如果可以保證爲正數,我建議將這種減法的結果投到std::size_t

char *因爲std::string沒有C++意義上的字符串,所以後者是比較保守的選擇。

這個問題是如此廣泛,沒有更具體的建議可以製成......