为了计数size_t[n]
中的设置位,我创建了一个LUT[256]
,其中每个字节预先计算了设置位的数量。
要使用std::accumulate
并迭代const size_t[n]
中的每个字节,需要转换为const char *
。
在C
中,(const char *)arrSizet
将起作用。在C++
中,我可以使用以下选项之一:
reinterpret_cast<const char *>(arrSizet)
char arrChar[BYTES_IN_SIZET_ARR]; memcpy(arrChar, arrSizet, BYTES_IN_SIZET_ARR);
C
样式的强制转换或使用reinterpret_cast
(1(通常应尽可能避免
While(2(不必要地复制数组。
那么,有没有更好的方法来完成这项工作呢?也许是一种将字节数组发送到std::accumulate
而不进行任何强制转换的方法?
在c++中,强制转换有时是必要的,它不应该被轻视。Memcpy是一种比石膏更危险的操作。在你的情况下,有一些方法可以绕过铸造,方法是让你自己积累,并使用逐位运算求和,但c++的核心是为铸造之类的东西而设计的。