在参考了这个问题后,我决定将每个容器的size_type
都设置为std::size_t
,以便提高可读性。尽管理论上来说std::container<T>::size_type
可能不是std::size_t
,但我假设当前和未来的配置中都不会出现这种情况。
然而,为了避免潜在的错误,我会在使用它们时检查类型是否相同。例如:
BOOST_STATIC_ASSERT(boost::is_same< std::vector<double>::size_type , std::size_t >::value);
std::vector<double> x;
/* fill x */
for(std::size_t i = 0; i < x.size(); ++i) { /* do something */ }
在代码的另一个位置,我使用了一个std::vector<long int>
,然后我也进行了检查:
BOOST_STATIC_ASSERT(boost::is_same< std::vector<long int>::size_type , std::size_t >::value);
然后,天哪!我使用了 std::vector<std::list<std::string>*>
和 std::vector<std::list<double*>*>
,之后我做了以下检查:
BOOST_STATIC_ASSERT(boost::is_same< std::vector<std::list<std::string>*>::size_type , std::size_t >::value);
BOOST_STATIC_ASSERT(boost::is_same< std::vector<std::list<double*>*>::size_type , std::size_t >::value);
好的,我想你已经理解了问题。丑陋的代码、难以维护。这是一个不好的主意。
那么,我的问题是:如果我检查std::vector<any_common_type>::size_type
是否为std::size_t
,那么std::vector<another_type>::size_type
是否有可能不是std::size_t
?仅仅在一个分离的文件中检查一些常见类型是否足以确保std::container::size_type
在我的编译器上始终为std::size_t
吗?
注意:出于兼容性原因,我不使用C++11。
std::string::find
的情况;-) - Caduchon