«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему Microsoft Visual C ++ не может правильно реализовать двухфазной экземпляры?

Почему Microsoft Visual C ++ не может правильно реализовать двухфазной экземпляры?

Опубликовано в 2025-03-09
Просматривать:750

Why Does Microsoft Visual C   Fail to Correctly Implement Two-Phase Template Instantiation?

загадка «Сломанная» двухфазное матричное экземпляры в Microsoft Visual C

Задача задачи:

пользователи обычно выражают обеспокоенность Microsoft Visual C (MSVC), осуществляющий коррекции. Какие конкретные аспекты механизма не могут работать, как и ожидалось? Однако возникают сомнения относительно того, проверяет ли эта проверка, являются ли имена, используемые в шаблонах надлежащим образом. Он не может проверить наличие объявленных имен, что приводит к вопросам компиляции, когда именам не хватает надлежащих объявлений.

, чтобы проиллюстрировать это, рассмотрим следующий пример: int foo (void*); шаблон struct s { S () {int i = foo (0); } }; void foo (int); int main () { S s; }

стандартный компилятор разрешает вызов Foo (0) во время первой фазы и связывает его с foo (void*). Тем не менее, MSVC откроет этот процесс во второй этап, неправильно связывая Foo (0) с foo (int) и, как приводит к ошибке.

, кроме того, реализация MSVC второй фазы отклоняется от языковой спецификации двумя способами:

. Phase.

он неправильно разрешает зависимые выражения, такие как bar (t) в коде ниже, к объявлениям, которые видны только во время второй фазы.

int foo(void*);

template struct S {
  S() { int i = foo(0); }
};

void foo(int);

int main() {
  S s;
}

В обоих случаях поведение MSVC противоречит указанному разделению между первым и вторым этапами экземпляра шаблона. Эта неправильная реализация сохраняется в Visual Studio 2015.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3