gpt4 book ai didi

c++ - 不明确的位域语句

转载 作者:行者123 更新时间:2023-11-28 03:35:00 25 4
gpt4 key购买 nike

下面的注释对我来说似乎是模棱两可的[在一本C++的书中找到]。

可以声明一个未命名的Bit-Field来创建填充以实现特定的对象布局。

作者想从上面的注释中传达什么?

我尝试了以下程序来理解但仍然不清楚。`

class s
{
public:
unsigned i:1;
};

int main()
{
s x;
x.i=1;
cout<<x.i<<endl; //outputs 1
return 0;
}

程序如何在不给出任何警告或错误的情况下完美运行?

我正在使用 ideone[C++ (gcc-4.3.4)]:http://ideone.com/bLLz4

但是,如果我从声明中删除 unsigned,它会给出错误:

prog.cpp:7: error: ISO C++ forbids declaration of ‘i’ with no type   

另一个问题

class s
{
public:
int i:1;
};

int main()
{
s x;
x.i=1;
cout<<x.i<<endl; //outputs -1
return 0;
}

输出 -1 是否取决于机器架构['Endianness']?
怎么输出的是-1?
http://ideone.com/XWbak

最佳答案

顾名思义,未命名 位字段是没有名称的。你的 unsigned i:1; 不是未命名的;它的名字是i。名称是可选的;类型不是。

C 标准(我将引用 N1570)在 6.7.2.1p12 中说:

A bit-field declaration with no declarator, but only a colon and a width, indicates an unnamed bit-field. As a special case, a bit-field structure member with a width of 0 indicates that no further bit-field is to be packed into the unit in which the previous bit-field, if any, was placed.

例如:

struct foo {
unsigned int x:1;
unsigned int :0;
unsigned int y:1;
};

请注意,位字段不能用于可靠地指定对象布局,因为它们表示的许多方面都是实现定义的。

关于c++ - 不明确的位域语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com