【发布时间】:2011-04-18 07:23:32
【问题描述】:
我正在设计一个 Buffer 类,其目的是表示一块内存。
我的底层缓冲区是char*(嗯,实际上是boost::shared_array<char>,但这并不重要)。
我一直在决定为我的构造函数选择什么原型:
我应该去:
Buffer(const void* buf, size_t buflen);
或与:
Buffer(const char* buf, size_t buflen);
还是别的什么?
通常会做什么,为什么?
【问题讨论】:
-
@Luca Matteis:我打算提供内存的隐式共享。但这完全是题外话。
-
有一个不幸的变形——由 Unicode 提示——
char正在成为octet的同义词,与“字符”几乎没有关系。这个问题是这种变化的征兆;我有时很想typedef char octet;以减少代码的误导性。 -
@msw:除了与字符串文字的类型兼容性之外,还有什么理由使用“char”,而不是“signed char”或“unsigned char”?这对我来说似乎是一种相当无用的类型。
-
@supercat:我同意你的观点;如果我这些天更多地使用 C,我可能会很在意断言“签名字符”至少会从语言中删除。换句话说,我的意思是
typedef unsigned char octet,如果我想得更多的话。 -
@msw:您为什么要消除一种有用且必不可少的类型? 'char' 类型是最没用的,因为它的有用范围只有 0..127。