Почему пустая оптимизация базового класса не работает?

Почему оптимизация пустого базового класса (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

13

Решение

Это давняя ошибка в компиляторе Visual C ++. Когда класс наследуется от нескольких пустых базовых классов, только начальный пустой базовый класс будет оптимизирован с использованием оптимизации пустых базовых классов (EBO).

Эта проблема была зарегистрирована в Microsoft Connect в 2006 году: Оптимизация пустой базы не работает должным образом. На данный момент старые ошибки не видны в Microsoft Connect. Мне сказали, что это временная проблема, хотя я не знаю, когда она будет решена. А пока что ответ на ошибку Джонатана Кейвса, одного из разработчиков команды по компиляции Visual C ++:

Привет: к сожалению, даже несмотря на то, что это ошибка в объектной модели Visual C ++, в настоящее время мы не можем ее исправить, учитывая, что исправление может привести к поломке многих существующих программ, так как размеры объектов будут меняться. Надеемся, что в будущем мы сможем решить эту проблему, но не до следующей версии продукта.

Спасибо за сообщение о проблеме.

18

Другие решения

«Официальная» позиция — MSVC будет выполнять EBO только для одиночного наследования, к сожалению, отчет об ошибке, где указано, что был удален MS, так что все, что осталось, — это более старая версия. вопрос по MSDN это указывает на это и ссылается на теперь удаленный отчет об ошибке.

8

По вопросам рекламы [email protected]