为什么空基类优化(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
这是 Visual C++ 编译器中长期存在的错误。当一个类派生自多个空基类时,只有初始空基类将使用空基优化 (EBO) 进行优化。
2006 年 Microsoft Connect 上报告了此问题:空基地优化无法正常工作。 https://connect.microsoft.com/VisualStudio/feedback/details/100686/empty-member-optimization-not-working-properly目前,旧的错误在 Microsoft Connect 上不可见。我被告知这是一个暂时的问题,但我不知道什么时候能解决。同时,以下是 Jonathan Caves(Visual C++ 编译器团队的开发人员之一)对该错误的回应:
您好:不幸的是,尽管这是 Visual C++ 对象模型中的一个错误,但我们目前无法修复它,因为修复它可能会破坏许多现有程序,因为对象的大小会发生变化。希望将来我们能够解决这个问题,但不能在产品的下一个版本中解决。
感谢您报告问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)