C++ 不明确的位域语句
下面的C++ 不明确的位域语句,c++,bit,C++,Bit,下面的注释对我来说[在一本C++书中]似乎是模棱两可的 可以声明未命名的位字段来创建填充,以实现特定的对象布局。 class s { public: int i:1; }; int main() { s x; x.i=1; cout<<x.i<<endl; //outputs -1 return 0; } 作者想从上述注释中传达什么 我试着理解以下程序,但仍然不清楚 class s { public: u
注释
对我来说[在一本C++书中]似乎是模棱两可的
可以声明未命名的位字段
来创建填充,以实现特定的对象布局。
class s
{
public:
int i:1;
};
int main()
{
s x;
x.i=1;
cout<<x.i<<endl; //outputs -1
return 0;
}
作者想从上述注释中传达什么
我试着理解以下程序,但仍然不清楚
class s
{
public:
unsigned i:1;
};
int main()
{
s x;
x.i=1;
cout<<x.i<<endl; //outputs 1
return 0;
}
另一个问题
class s
{
public:
int i:1;
};
int main()
{
s x;
x.i=1;
cout<<x.i<<endl; //outputs -1
return 0;
}
s类
{
公众:
int i:1;
};
int main()
{
sx;
x、 i=1;
cout一个未命名的位字段,顾名思义,是一个没有名称的字段。您的无符号i:1;
不是未命名的;它的名称是i
。名称是可选的;类型不是
C标准(我将引用)在6.7.2.1p12中说:
一种位字段声明,没有声明符,只有冒号和
宽度,表示未命名的位字段。作为特例,位字段
宽度为0的结构成员表示没有更多的位字段
要打包到单元中,在该单元中,前一个位字段(如果有),
被放置
例如:
struct foo {
unsigned int x:1;
unsigned int :0;
unsigned int y:1;
};
请注意,位字段不能用于可靠地指定对象布局,因为它们表示的许多方面都是由实现定义的。在“unsigned i”中,关键字“unsigned”不是成员的名称,而是类型。“i”是名称(确实是可选的)。第二个是带符号的int(在x86上,不确定其他名称)与非负值具有相同数量的负值。因此,对于一位,值为-1和0。(我要睡觉了。如果有人想将其扩展为完整答案,请放心)我有两个问题。您在“含糊不清”的引号中发现了哪两个或更多含义;为什么您认为代码不应该编译和工作?