我正在查看一些 C++ 网络代码。当我去找出缓冲区有多大时,我发现了这样的东西:
static const uint32_t MAX_COMMAND_BUFFER =
sizeof(struct S1) | sizeof(struct S2) | sizeof(struct S3) |
sizeof(struct S4) | sizeof(struct S5) | sizeof(struct S6);
我相信这里的基本思想是缓冲区可以包含这 6 个结构中的任何一个。这是在外部范围声明的,因此它可用于稍后的外部范围uint8_t
数组大小。
现在通常在这里我希望看到使用 std::max() 函数或三元运算符来计算这 6 个结构中最大的确切大小的东西。我以前从未见过上述成语,不得不停下来说服自己它会起作用。
因此,由于我是这方面的新手,我一般想知道这是多么有效,以及这样做的好处和缺点是什么。
我能看到的是——
亲:
- 它应该始终为您提供至少与最大结构大小一样大的大小。如果空间不是很宝贵,这就是您真正需要的。
- 它似乎在编译时是可计算的。
- 它甚至可以使用非常旧的 C++(甚至 C)编译器。
缺点:
- 它可以使尺寸几乎是必要的两倍。
- 这使得人们更难以离线准确地确定缓冲区的大小。
- 它奇怪/出乎意料。