【发布时间】:2021-11-07 08:38:58
【问题描述】:
为什么空基类优化 (EBO) 没有在 Visual C++ 中得到充分应用?
如果我有很多基类,有什么方法可以帮助编译器进行这种优化?
#include <iostream>
struct T1 { };
struct T2 { };
struct T3 { };
struct T4 { };
struct T5 { };
struct T6 { };
struct Test : T1, T2, T3, T4, T5, T6 { };
int main() { std::cout << sizeof(Test); } // Prints 5
【问题讨论】:
-
你是在调试模式下编译吗?
-
嗯...我没看到你有 6 个...这让事情变得更加混乱...
-
@Mysticial:是的,如果你把派生类也算进去的话,它是 7。这就是为什么它让我感到困惑哈哈。 (有趣的是,当你嵌套它们时它似乎也没有消失。我有一堆空类,每个类都有 1-2 个基类,但它们都相互继承,对象最终像 30字节!!)
-
g++ is working fine,这可能是 MS 特定的行为或必须设置调试标志。
-
这种行为是 boost 运算符具有基类链接而不是简单地让用户进行多重继承的原因 boost.org/doc/libs/1_51_0/libs/utility/operators.htm#chaining
标签: c++ visual-c++ compiler-optimization empty-class