3

我正在查看另一个开发人员的代码,其中包含以下内容:

std::string name;
...
std::string::size_type colon = name.find(":");

我认为 usingsize_t会更容易理解并且同样安全,因为 STL 标准规定了std::stringisstd::basic_string<char, std::allocator>std::allocator::size_typeis size_t

他希望确保 STL 标准永远不会改变以使这个假设无效。如果标准可以改变,那么size_type将比size_t.

那会发生吗?有没有其他理由使用size_type而不是size_t

4

2 回答 2

8

size_type应该在以容器类型为模板的代码中使用。当您一直在操作的代码时std::string,您可以使用size_t.

于 2012-05-09T16:22:49.883 回答
6

我认为最好的方法是使用auto,这样你就可以自动符合函数返回的任何内容:

auto colon = name.find(":");

它避免了您所描述的问题,而且要短得多。

正如 larsmans 在评论中提到的那样,您可能希望将字符串索引存储在 astruct或其他任何内容中,而没有可用于从中获取返回类型的变量。这也是可行的:

struct StoreStringIndex {
    decltype(declval<std::string>().length()) length;
};

std::string::size_type但比虽然更复杂且不短。因此,对于存储内容,您可能希望使用类型size_type,但对于局部变量和内容,请使用auto.

于 2012-05-09T16:23:22.130 回答