我正在审查另一位开发者的代码,其中包含以下内容:
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
适用于每个容器,无论它们使用什么类型,因此更加一致。 - chrisname
总是一个真实的std::string
。 - Chowlettstring
或vector
的size_t
大小的代码的方式进行更改。 - Steve Jessopfind
函数的返回类型更改为除了std::string::size_type
之外的其他类型。对于这种破坏性变化,无法进行预测。 - Steve Jessopstring::size_type
可能会改变,但是string::find()
也可能改变。非常好的观点,谢谢! - Chowlett