如果我定义了如下结构:

struct blank {
    int : 0;
};


编译器会在运行时优化它吗?

我问是因为this rather popular SO question。我想在自己的C / C ++代码中使用类似的编译时检查。我正在尝试使程序尽可能最佳,因此,如果我只打算将它们用于编译时检查,则我不希望这些空结构在运行时到处徘徊。

附带说明一下,是否有一种C ++惯用的方式来实现与链接中相同的结果?

最佳答案

C ++仅在对象实现基类时才允许该优化。 (因此,它被称为空基础优化或EBO。)对于独立的对象或作为另一个struct成员的对象,即使该字节只是填充,它也必须至少一个字节大。

至于链接问题中的结构,请不要担心。那里没有对象,只有一种类型。即使有对象,链接器也会将其剥离。除非您明确要求导出所有内容,否则未引用的函数和全局对象不会进入可执行文件。即使在这种情况下,它仍可能需要保留名称。

正如其他人提到的那样,C ++ 11的实现方式是static_assert。它需要一条错误消息:

static_assert( condition, "Error: condition was false." );

关于c++ - 编译器是否优化大小为0的结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15014870/

10-13 08:23
查看更多