我在阅读一些代码时遇到了这个例子。我不明白的是为什么作者在最后一行使用两个变量的偏移量 1。乍一看,我会认为这是非法的,因为它指的是一个可能未初始化的内存区域(并且它可能导致段错误)。我的头脑不断告诉我未定义的行为,但真的是这样吗?
static bool lt(wchar_t a, wchar_t b)
{
const std::collate<wchar_t>& coll =
std::use_facet< std::collate<wchar_t> >(std::locale());
return coll.compare(&a, &a+1, &b, &b+1) < 0;
}
最后一行是有问题的。为什么他有必要这样做,是否合法,应该什么时候做?
最佳答案
看来作者只是想使用当前的全局语言环境来比较两个字符。
自 std::collate<T>::compare
对两个范围使用 [low, high) ,将参数的地址加 1 只会导致比较在只有 a 与 b 进行比较后停止。不应该有无效的内存访问。
关于c++ - 从内存地址偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984298/