【发布时间】:2012-05-18 04:51:44
【问题描述】:
我正在审查另一位开发人员的代码,其中包含以下内容:
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适合每个容器,无论它们使用什么类型,因此更加一致。 -
你可能会认为
name永远是一个真实的std::string。 -
没有“STL 标准”。 C++ 标准可能会改变,但是你会使用另一种语言(称之为“C++11”),它与你现在使用的语言并不完全向后兼容(称之为“ C++03")。将代码从 C++03 移植到 C++11 需要知道什么是重大变化,并考虑它们。所以如果你来到它,你可以穿过那座桥。在那之前,如果标准说它是真的,那么它就是真的。 IMO 标准不太可能以使用
size_t的大小破坏代码的方式发生变化,string或vector默认分配器的大小。 -
...您也可以推测未来的标准可能会将
find的返回类型更改为std::string::size_type以外的其他类型。没有考虑到重大变化。 -
@SteveJessop - 我认为你的第二点特别相关。是的,
string::size_type可以改变,但string::find()也可以。很好,谢谢!