gpt4 book ai didi

c++ - 随着 std::byte 的标准化,我们什么时候使用 void* 什么时候使用 byte*?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:10 25 4
gpt4 key购买 nike

C++17 将包含 std::byte ,一种用于一个原子可寻址内存单元的类型,在典型计算机上具有 8 位。

在此标准化之前,在指向“原始”内存时已经存在一些困境 - 在一方面使用 char*/unsigned char* 还是使用 void * 在另一边。现在,首选 void * 的原因之一已被删除 - std::bytechar 没有相同的含义;这是关于原始内存,而不是字符。

所以,我的问题是:对于 std::byte 的时代,关于什么时候更喜欢它而不是 void * 以及什么时候有什么好的经验法则是不是反过来了?


当然,当您处理旧代码或 C 代码时,您会受到它所接受内容的限制;我主要指的是新代码,您可以在其中选择所有类型。

最佳答案

(这是一个潜在的经验法则,它来 self 的脑海,没有任何人宽恕。)

经验法则:何时使用哪种指针?

  • 对文本字符序列使用 char *,而不是其他任何内容。
  • 在类型删除场景中使用 void *,即当指向的数据被键入时,但由于某种原因不能使用或不能使用类型指针确定是否输入。
  • 使用 byte * 作为原始内存,没有迹象表明它包含任何类型化的数据。

上述情况的异常(exception)情况:

  • 在旧代码中也使用void */unsigned char */char *;或者当非 C++ 代码强制您使用 byte * 时。但是在执行此操作时,您仍然可以使用基于 byte * 的接口(interface)来包装此类使用,从而不会将这种情况暴露给其余的 C++ 代码。

例子

void * my_custom_malloc(size_t size) - 错误
byte * my_custom_malloc(size_t size) - 正确

struct buffer_t { byte* 数据; size_t 长度; my_type_t 数据类型; } - 错误
struct buffer_t { void* 数据; size_t 长度; my_type_t 数据类型; -

关于c++ - 随着 std::byte 的标准化,我们什么时候使用 void* 什么时候使用 byte*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45435875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com