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

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

Опубликовано в 2025-02-06
Просматривать:403

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 второго этапа отклоняется от языковой спецификации двумя способами. : ]

. которые видны только во время второго этапа.

пространство имен n { struct s {}; } void bar (void *) {} шаблон void foo (t *t) { Барт); } void bar (n :: s *s) {} int main () { N :: s s; foo (& amp; s); }

int foo(void*);

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

void foo(int);

int main() {
  S s;
}
]
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3