gpt4 book ai didi

c++ - 错误 : . 是什么意思。 Xcode/Clang 中的 ."bytes to alignment boundary"?

转载 作者:太空狗 更新时间:2023-10-29 21:01:12 25 4
gpt4 key购买 nike

具有 4 个字节到对齐边界的 TransformNode

这是导致此警告的代码:

class TransformNode : public Node {
public:
int number;

public:

void test() { number = 12; }
};

//Node.h
class Node {
public:
typedef std::set<Node *> ChildSet;

protected:
ChildSet mChildren;
Node * mParent;

public:
Node(Node * parent=0) : mParent(parent) {}
~Node() {}

Node * addChild(Node * node);
inline Node * getParent() { return mParent; }

const ChildSet &getChildren() const { return mChildren; }
};


inline void node_test() {
TransformNode * node = new TransformNode;
node->test();
std::cout << node->number << "\n";
}

int main() {

node_test();
return 0;
}

当我从类 TransformNode 派生 Node 类时发生错误。我正在使用 xcode 5.0 并打开所有警告并将警告视为错误。我真的很想了解这段代码发生了什么,所以只是关闭警告或停止将它们视为错误并不是我想要的处理方式。

编辑:添加了更多代码。澄清一些细节(粗体)

谢谢,
加西姆

最佳答案

我不确定您看到的是否真的是一个错误。通常,“所有警告”包括几乎不被视为警告的各种内容;哎呀,在大多数情况下,它们甚至都不是 super 有用的信息。

对齐是一个您可能不关心的问题,除非您使用的是非常特殊的硬件,例如在嵌入式系统中。可能发生的情况是您的编译器默认为 8 字节对齐,并且当您定义 TransformNode 类时,您正在为 int 分配 4 个字节并“浪费”4更多字节以将整个类对齐到 8 字节边界。编译器警告告诉您“浪费”了 4 个字节。正如我所说,您可能不关心这个。

我认为一般来说,如果您打开了最大警告和错误警告,您只会把自己逼疯。如果您真的想要 super 干净,则退后一级警告然后将其视为错误可能更有用。

重新编辑:根据最近的编辑澄清了答案。

另一个想法:尝试在您的 TransformNode 类中添加另一个 int 并查看警告是否消失(我假设它会因为 int #2 将“用完”“浪费”的 4 个字节)。

您还可以查看 http://en.wikipedia.org/wiki/Data_padding更好地理解这个问题。

关于c++ - 错误 : . 是什么意思。 Xcode/Clang 中的 ."bytes to alignment boundary"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210080/

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