This question already has answers here:
What does 'unsigned temp:3' in a struct or union mean? [duplicate]
                                
                                    (4个答案)
                                
                        
                                2年前关闭。
            
                    
我正在阅读Adam Drozdek撰写的《 C ++第4版中的数据结构和算法》一书,遇到了以下代码。我的问题是unsigned int successor : 1;中的冒号是做什么的。
我找到了一个答案,说冒号使successor只占一点。但是我知道布尔变量占用字节的倍数,因为该变量必须是可寻址的。如果successor仅占用一位,如何寻址?

template<class T>
class ThreadedNode {
    public:
         ThreadedNode() {
             left = right = 0;
         }
         ThreadedNode(const T& e, ThreadedNode *l = 0, ThreadedNode *r = 0) {
             el = e; left = l; right = r; successor = 0;
         }
         T el;
         ThreadedNode *left, *right;
         unsigned int successor : 1;
};

最佳答案

这称为Bit Field。表达式unsigned int successor : 1;声明一个名为unsigned intsuccessor,您希望仅使用1位。

以某种方式需要使用比指定数量更多的位来使用位字段的行为是实现定义的行为。也不可能获得对位字段的指针或非常量引用,因为它们不一定从字节的开头开始。

位字段在某些情况下允许编译器通过将兼容的位字段打包在一起来减小类型的大小。位字段在大小减小方面没有约束力,对于编译器而言只是一个机会。

关于c++ - 以下C++代码中的冒号是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47895480/

10-12 23:27