C++ 为什么这个类的sizeof()返回4和2个字节
当我打印下面定义的类的sizeof(SenseNode)时,返回4。我原以为是2个,因为2个uint8_t私人成员。 我用另外两个字节做什么C++ 为什么这个类的sizeof()返回4和2个字节,c++,arduino-esp8266,C++,Arduino Esp8266,当我打印下面定义的类的sizeof(SenseNode)时,返回4。我原以为是2个,因为2个uint8_t私人成员。 我用另外两个字节做什么 enum NodeType { unknown = 255, temperature=0, button=1, text=2, page=3, dualstate=4, slider=5, alarmHandler=6, clock=7, gps=8, yawpitchroll = 9, gsm = 10,
enum NodeType { unknown = 255, temperature=0, button=1, text=2, page=3, dualstate=4, slider=5, alarmHandler=6, clock=7, gps=8,
yawpitchroll = 9, gsm = 10, alert = 11 };
class SenseNode {
public:
SenseNode(uint8_t id) : SenseNode(id, NodeType::unknown) {};
SenseNode(uint8_t id, NodeType type) : id(id), nodeType(type) {};
virtual ~SenseNode() = default;
// Dispatcher of notifyObserver
virtual void notifyObserver2(SenseObserver* observer);
/* Accessor for property Id */
uint8_t getId() { return id; }
NodeType getNodeType() { return nodeType; }
private:
uint8_t id = 0;
uint8_t nodeType = NodeType::unknown;
};
首先,
SenseNode
类是多态的,因为您有一个虚拟函数。编译器将指针添加到vtable,因此类的大小取决于平台。在你的例子中,指针的大小是2,我们有2+1+1=4。您可以阅读有关此主题的内容。请记住,虚拟指针可能重复!!!顺便说一句,很难想象通过某个协议传输整个虚拟对象我希望它至少是8。你的平台上的sizeof(void*)
是什么?@HolyBlackCat他在arduino so 2上