c++ - 从内存地址偏移

标签 c++

我在阅读一些代码时遇到了这个例子。我不明白的是为什么作者在最后一行使用两个变量的偏移量 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/

相关文章:

c++ - 如何在 Windows 8 中获取事件窗口的标题颜色

c++ - 按位移位,无符号字符

c++ - 获取常见文件类型的图标

c++ - 模板模板参数扣: three different compilers three different behaviors

c++ - OpenGL 在自己的轴上旋转 3D 立方体

php - 如何在 php 扩展中包装 c++ 类?

c++ - 如何将 XML 模式映射到 C/C++ 代码?

c++ - 将文件中的数据读入单独的 Int 值

c++ - 在 Visual C++ Express 中构建 C 代码

c++ - 当已经假设 __STDC_IEC_559__ 时,将 float 序列化为字节