使用表示位的unsigned char数组。我遇到了以下情况。在MSVC 2013上将std::bitset<8>
转换为char,然后返回。似乎是一件有效的事情。
但是在C ++ 11 ISO标准中。我无法找到这个有效的参考。根据我能够收集的内容,std::bitset
仅仅是bool
数组。具有更多的记忆经济实施和围绕它的一些功能。
简而言之,我的问题是:下面的代码是否有效。
unsigned char* myChar = new unsigned char(0x0F);
((std::bitset<8>*)myChar)->set(2);
((std::bitset<8>*)myChar)->reset(6);
std::cout << "expression result:" << (uint8_t)*myChar;
答案 0 :(得分:3)
这是未定义的行为。该标准仅表明
类模板
bitset<N>
描述了一个可以存储由固定数量组成的序列的对象 位,N
。
它内部没有说明这个类的布局。无法保证sizeof(bitset<8>)
为1
。在我的实现中,恰好是8
。因此,你对这个类的内部构成的任何假设都只是 - 一个假设。如果您想将unsigned char
转换为bitset<8>
,则有一种简单的方法可以做到这一点:
unsigned char myChar = 0x0F;
std::bitset<8> bs(myChar);