![](/img/trans.png)
[英]std::size_t vs size_t vs std::string::size_type
[英]Is there any benefit to using std::string::size_type over size_t?
我正在審查另一個開發人員的代碼,其中包含以下內容:
std::string name;
...
std::string::size_type colon = name.find(":");
我認為使用size_t
會更容易理解並且同樣安全,因為STL標准聲明std::string
是std::basic_string<char, std::allocator>
,而std::allocator::size_type
是size_t
。
他希望保證STL標准不可能改變以使這個假設無效; 如果標准可以改變,那么size_type
將比size_t
更安全。
這會發生嗎? 是否有任何其他原因使用size_type
而不是size_t
?
size_type
應該在容器類型上模板化的代碼中使用。 當你總是在std::string
上運行代碼時,你可以使用size_t
。
我認為最好的方法是使用auto
,這樣你就可以自動符合函數返回的內容:
auto colon = name.find(":");
它避免了你描述的問題而且它縮短了很多。
正如larsmans在評論中提到的那樣,您可能希望將字符串索引存儲在struct
或其他任何內容中,而無需使用變量來獲取返回類型。 這也是可行的:
struct StoreStringIndex {
decltype(declval<std::string>().length()) length;
};
但是比std::string::size_type
更復雜且不短。 因此,對於存儲內容,您可能希望使用類型的size_type
,但對於局部變量和內容,請使用auto
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.