相关疑难解决方法(0)

什么是"跨度",什么时候应该使用?

最近我有建议span<T>在我的代码中使用's,或者在网站上看到了一些使用span's - 应该是某种容器的答案.但是 - 我在C++标准库中找不到类似的东西.

那么这个神秘的是什么span<T>,以及为什么(或什么时候)使用它是一个好主意,如果它是非标准的?

c++ c++-faq cpp-core-guidelines c++20 std-span

202
推荐指数
3
解决办法
4万
查看次数

如何安全合理地确定指针是否指向某个指定缓冲区?

我正在寻找一个函数来确定给定的指针是否指向给定的缓冲区.规格:


template <typename T>
bool points_into_buffer (T *p, T *buf, std::size_t len);
Run Code Online (Sandbox Code Playgroud)

如果有一些n,0 <= n && n < len为这p == buf + n,退货true.

否则,如果有一些n,0 <= n && n < len * sizeof(T)为它reinterpret_cast<char *>(p) == reinterpret_cast<char *>(buf) + n的行为是不确定的.

否则,返回false.


明显的实现看起来像

template <typename T>
bool points_into_buffer (T *p, T *buf, std::size_t len) {
    return p >= buf && p < buf + len;
}
Run Code Online (Sandbox Code Playgroud)

但是在标准C++中有未定义的行为:指针的关系比较仅针对指向同一数组的指针定义. …

c++ pointers undefined-behavior

15
推荐指数
1
解决办法
233
查看次数