【发布时间】:2016-11-17 12:40:46
【问题描述】:
在 C 结构中,可以指定另一个位长而不是默认类型的位长,如下所示:
struct MyStruct{
int myVar : 1; //Size of myVar is 1 bit (so it can take values 0 or 1
int myOtherVar: 4; //Size of myOtherVar is 4 bits (so it can take values 0 to 15)
}
这称为位域。
我的问题是是否也可以在 C++ 类中执行此操作,如下所示:
class MyClass{
public:
//Some methods
private:
int m_myAttribute : 1;
int m_myOtherAttribute : 4;
}
我在网上搜索了这个,但我发现的所有位字段示例都使用了结构,而不是类。
我测试了这段代码,它编译得很好,但我想知道属性的大小是否真的是指定的大小,或者编译器是否只是忽略了位字段并使用了标准的int 大小。
【问题讨论】:
-
这不会回答你的问题,但可能是相关的:stackoverflow.com/questions/3319717/…
-
可以通过
sizeof()函数查看。另外,据我所知,结构和类之间的唯一区别是,默认类变量将是 private,默认结构变量将是 public。你应该在这里阅读:[stackoverflow.com/a/7762179/1867076] -
C++ 中的类几乎在所有方面都与结构相同。 唯一的区别是默认访问说明符(对于类 - 私有,对于结构 - 公共)
-
@Prometheus 不,我无法使用
sizeof()进行检查。sizeof()不适用于位域(请参阅the link that Roy T. posted)
标签: c++ class bit-fields