【发布时间】:2014-10-16 11:12:41
【问题描述】:
我希望消除算法中的特殊情况,为此我想确保 std::string::npos + 1 是 0。
在我测试过的所有实现中都是如此,在标准中搜索我发现以下内容:
namespace std {
template<class charT, class traits = char_traits<charT>,
class Allocator = allocator<charT> >
class basic_string {
// ...
typedef typename allocator_traits<Allocator>::size_type size_type;
// ...
static const size_type npos = -1;
...
};
}
allocator_traits<Allocator>::size_type 被定义为无符号整数类型。
所以,我想,我的问题归结为 (static_cast<T>(-1)) + 1 是否总是为无符号整数类型 T 提供 0?
【问题讨论】:
-
numeric_limits<T>::max呢? -
我猜是的,但我不确定。
-
在 C++11 中你可以
static_assert (std::string::npos + 1 == 0, "bizarre string::npos") -
-
可能是的,但编译器会将其优化为无,这对接下来将处理您的代码的人类程序员来说是一个有用的提醒。
标签: c++