Eph*_*era 0 c++ struct compile-time compiler-optimization
如果我有一个定义的结构,如下所示:
struct blank {
int : 0;
};
Run Code Online (Sandbox Code Playgroud)
编译器会在运行时将其优化为零吗?
我问,因为这个相当受欢迎的SO问题.我想在我自己的C/C++代码中使用类似的编译时检查.我正在尝试使程序尽可能最佳,所以如果我只是将它们用于编译时检查,我不希望这些空结构在运行时闲置.
另一方面,是否有一种C++ - 惯用的方式来实现与链接相同的结果?
当对象实现基类时,C++只允许优化.(因此它被称为空基优化或EBO.)对于一个独立的对象,或作为另一个的成员,struct即使该字节只是填充,它也必须至少有一个字节大.
至于链接问题中的结构,请不要担心.那里没有对象,只有一种类型.即使有一个对象,它也会被链接器剥离.除非您特别要求导出所有内容,否则未引用的函数和全局对象不会进入可执行文件.即使在这种情况下,它仍然可能需要保留一个名称.
正如其他人所提到的,C++ 11的做法是static_assert.它需要一条错误消息:
static_assert( condition, "Error: condition was false." );
Run Code Online (Sandbox Code Playgroud)