我正在审核其他开发人员的代码,其中包含以下内容:
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
是{ {1}}。
他希望保证STL标准不可能改变以使这个假设无效;如果标准可能发生变化,那么size_t
将比size_type
更安全。
会发生这种情况吗?是否有其他理由使用size_t
而不是size_type
?
答案 0 :(得分:8)
size_type
。如果您始终在std::string
上运行代码,则可以使用size_t
。
答案 1 :(得分:6)
我认为最好的方法是使用auto
,这样你就可以自动符合函数返回的内容:
auto colon = name.find(":");
它避免了您所描述的问题,并且缩短了很多。
正如larsmans在评论中提到的那样,您可能希望将字符串索引存储在struct
或其他任何内容中,而无需使用变量来获取返回类型。这也是可行的:
struct StoreStringIndex {
decltype(declval<std::string>().length()) length;
};
但更复杂但不短于std::string::size_type
。因此,对于存储内容,您可能希望使用类型size_type
,但对于局部变量和内容,请使用auto
。