Перейти к содержимому

Answer c что это

  • автор:

Обзор модулей в C++

C++20 представляет модули, современное решение, которое превращает библиотеки и программы C++ в компоненты. Модуль — это набор файлов исходного кода, скомпилированных независимо от исходных файлов (или более точно, единиц перевода, импортируемых ими). Модули устраняют или сокращают многие проблемы, связанные с использованием файлов заголовков. Они часто сокращают время компиляции. Макросы, директивы препроцессора и неэкспортированные имена, объявленные в модуле, не отображаются за пределами модуля. Они не влияют на компиляцию единицы перевода, импортируемой модулем. Модули можно импортировать в любом порядке без проблем с переопределениями макросов. Объявления в импортируемом модуле перевода не участвуют в разрешении перегрузки или поиске имен в импортированном модуле. После компиляции модуля результаты хранятся в двоичном файле, который описывает все экспортированные типы, функции и шаблоны. Компилятор может обрабатывать этот файл гораздо быстрее, чем файл заголовка. И компилятор может повторно использовать его везде, где модуль импортируется в проект.

Модули можно использовать параллельно с файлами заголовков. Исходный файл C++ может использовать import модули и #include файлы заголовков. В некоторых случаях можно импортировать файл заголовка в виде модуля, который быстрее, чем используется #include для обработки с помощью препроцессора. Рекомендуется использовать модули в новых проектах, а не файлы заголовков как можно больше. Для более крупных существующих проектов при активной разработке поэкспериментируйте с преобразованием устаревших заголовков в модули. На основе внедрения зависит от того, получается ли существенное сокращение времени компиляции.

Чтобы контрастировать модули с другими способами импорта стандартной библиотеки, см. раздел «Сравнение единиц заголовков», модулей и предварительно скомпилированных заголовков.

Включение модулей в компиляторе Microsoft C++

Начиная с Visual Studio 2022 версии 17.1, стандартные модули C++20 полностью реализованы в компиляторе Microsoft C++.

Прежде чем он был указан стандартом C++20, корпорация Майкрософт поддерживала экспериментальную поддержку модулей. Компилятор также поддерживает импорт предварительно созданных модулей стандартной библиотеки, описанных ниже.

Начиная с Visual Studio 2022 версии 17.5 импорт стандартной библиотеки в качестве модуля является стандартизованным и полностью реализован в компиляторе Microsoft C++. В этом разделе описывается старый экспериментальный метод, который по-прежнему поддерживается. Сведения о новом стандартизованном способе импорта стандартной библиотеки с помощью модулей см. в статье «Импорт стандартной библиотеки C++ с помощью модулей».

Вы можете использовать функцию модулей для создания модулей с одним разделом и импорта модулей стандартной библиотеки, предоставляемых корпорацией Майкрософт. Чтобы включить поддержку модулей стандартной библиотеки, выполните компиляцию и /experimental:module /std:c++latest . В проекте Visual Studio щелкните правой кнопкой мыши узел проекта в Обозреватель решений и выберите «Свойства«. Установите раскрывающийся список «Конфигурация» на все конфигурации, а затем выберите «Свойства> конфигурации C/C++>Language>Enable C++ Modules (экспериментальные)».

Модуль и код, который использует его, необходимо скомпилировать с теми же параметрами компилятора.

Использование стандартной библиотеки C++ в качестве модулей (экспериментальных)

В этом разделе описывается экспериментальная реализация, которая по-прежнему поддерживается. Новый стандартизованный способ использования стандартной библиотеки C++ в качестве модулей описывается в статье Импорт стандартной библиотеки C++ с помощью модулей.

Импортируя стандартную библиотеку C++ в виде модулей, а не включив ее в файлы заголовков, вы можете ускорить компиляцию в зависимости от размера проекта. Экспериментальная библиотека разделена на следующие именованные модули:

  • std.regex предоставляет содержимое заголовка
  • std.filesystem предоставляет содержимое заголовка
  • std.memory предоставляет содержимое заголовка
  • std.threading предоставляет содержимое заголовков , , , , и
  • std.core предоставляет все остальное в стандартной библиотеке C++

Чтобы использовать эти модули, добавьте объявление импорта в начало файла исходного кода. Например:

import std.core; import std.regex; 

Чтобы использовать модули стандартной библиотеки Майкрософт, скомпилируйте программу с /EHsc помощью параметров и /MD параметров.

Пример

В следующем примере показано простое определение модуля в исходном файле Example.ixx . Расширение .ixx требуется для файлов интерфейса модуля в Visual Studio. В этом примере файл интерфейса содержит определение функции и объявление. Однако вы также можете поместить определения в один или несколько отдельных файлов реализации модуля, как показано в следующем примере. Инструкция export module Example; указывает, что этот файл является основным интерфейсом для вызываемого Example модуля. Модификатор export f() указывает, что эта функция отображается при импорте Example другой программы или модуля. Модуль ссылается на пространство Example_NS имен.

// Example.ixx export module Example; #define ANSWER 42 namespace Example_NS < int f_internal() < return ANSWER; >export int f() < return f_internal(); >> 

Файл MyProgram.cpp использует import объявление для доступа к имени, экспортируемого Example . Имя Example_NS отображается здесь, но не все его члены. Кроме того, макрос ANSWER не отображается.

// MyProgram.cpp import Example; import std.core; using namespace std; int main() < cout 

Объявление import может отображаться только в глобальных область.

Грамматика модуля

module-name :
module-name-qualifier-seq необ. identifier

module-name-qualifier-seq :
identifier .
module-name-qualifier-seq identifier .

module-partition :
: module-name

module-declaration :
export opt module module-name module-partition opt attribute-specifier-seq opt ;

module-import-declaration :
export opt import module-name attribute-specifier-seq opt ;
export opt import module-partition attribute-specifier-seq opt ;
export opt import header-name attribute-specifier-seq opt ;

Реализация модулей

Интерфейс модуля экспортирует имя модуля и все пространства имен, типы, функции и т. д., составляющие общедоступный интерфейс модуля. Реализация модуля определяет вещи, экспортированные модулем. В самой простой форме модуль может состоять из одного файла, который объединяет интерфейс модуля и реализацию. Вы также можете поместить реализацию в один или несколько отдельных файлов реализации модуля, как .h и .cpp файлы.

Для более крупных модулей можно разделить части модуля на подмодулы, называемые секциями. Каждая секция состоит из файла интерфейса модуля, который экспортирует имя секции модуля. У секции также может быть один или несколько файлов реализации секций. Модуль в целом имеет один основной интерфейс модуля, который является общедоступным интерфейсом модуля и может экспортировать интерфейсы секций.

Модуль состоит из одного или нескольких единиц модуля. Модуль — это единица перевода (исходный файл), содержащая объявление модуля. Существует несколько типов единиц модуля:

  • Модуль интерфейса модуля — это единица модуля, которая экспортирует имя модуля или имя секции модуля. Модуль интерфейса модуля содержит export module в своем объявлении модуля.
  • Единица реализации модуля — это модуль, который не экспортирует имя модуля или имя секции модуля. Как подразумевает имя, он реализует модуль.
  • Основной блок интерфейса модуля — это единица интерфейса модуля, которая экспортирует имя модуля. В модуле должен быть один и только один основной модуль интерфейса модуля.
  • Единица интерфейса секционирования модуля — это единица интерфейса модуля, которая экспортирует имя секции модуля.
  • Единица реализации секции модуля — это единица реализации модуля с именем секции модуля в объявлении модуля, но не export ключевое слово.

Ключевое слово export используется только в файлах интерфейса. Файл реализации может быть import другим модулем, но не export может содержать имена. Файлы реализации могут иметь любое расширение.

Модули, пространства имен и поиск, зависящие от аргументов

Правила для пространств имен в модулях совпадают с другими правилами кода. Если объявление в пространстве имен экспортируется, вложенный пространство имен (за исключением неэкспортированных элементов) также экспортируется неявно. Если пространство имен экспортируется явным образом, экспортируются все объявления в определении пространства имен.

Когда компилятор выполняет поиск в зависимости от аргументов для разрешения перегрузки в модуле импорта перевода, он рассматривает функции, объявленные в той же единице перевода (включая интерфейсы модулей), где определены тип аргументов функции.

Секции модулей

Раздел модуля аналогичен модулю, за исключением того, что он разделяет владение всеми объявлениями во всем модуле. Все имена, экспортированные файлами интерфейса секционирования, импортируются и повторно экспортируются файлом первичного интерфейса. Имя раздела должно начинаться с имени модуля, за которым следует двоеточие. Объявления в любом из разделов отображаются во всем модуле. Для предотвращения ошибок с одним определением (ODR) не требуются специальные меры предосторожности. Можно объявить имя (функция, класс и т. д.) в одной секции и определить его в другом. Файл реализации секции начинается следующим образом:

module Example:part1; 

Файл интерфейса секции начинается следующим образом:

export module Example:part1; 

Чтобы получить доступ к объявлениям в другой секции, раздел должен импортировать его, но он может использовать только имя секции, а не имя модуля:

module Example:part2; import :part1; 

Блок первичного интерфейса должен импортировать и повторно экспортировать все файлы секции интерфейса модуля, как показано ниже.

export import :part1; export import :part2; . 

Основной блок интерфейса может импортировать файлы реализации секций, но не может экспортировать их. Эти файлы не разрешены для экспорта имен. Это ограничение позволяет модулю хранить сведения о реализации внутри модуля.

Модули и файлы заголовков

Файлы заголовков можно включить в исходный файл модуля, поместив директиву #include перед объявлением модуля. Эти файлы считаются в глобальном фрагменте модуля. Модуль может видеть только имена в глобальном фрагменте модуля, которые находятся в заголовках, которые он явно включает. Глобальный фрагмент модуля содержит только символы, используемые.

// MyModuleA.cpp #include "customlib.h" #include "anotherlib.h" import std.core; import MyModuleB; //. rest of file 

Для управления импортом модулей можно использовать традиционный файл заголовка:

// MyProgram.h import std.core; #ifdef DEBUG_LOGGING import std.filesystem; #endif 

Импортированные файлы заголовков

Некоторые заголовки достаточно автономны, что их можно использовать с помощью import ключевое слово. Основное различие между импортированным заголовком и импортированным модулем заключается в том, что все определения препроцессора в заголовке отображаются в программе импорта сразу после инструкции import .

import ; import "myheader.h"; 

Быстрые ответы на угрозы для iOS, iPadOS и macOS

Быстрые ответы на угрозы предоставляют важные улучшения системы безопасности еще до выхода очередного обновления ПО. Быстрые ответы на угрозы — это новый тип программного обеспечения для iPhone, iPad и Mac. Они предоставляют важные улучшения системы безопасности еще до выхода очередного обновления ПО. Примером таких быстрых ответов могут быть улучшения веб-браузера Safari, стека платформы WebKit или иных критических системных библиотек. Они также могут использоваться для более быстрого уменьшения рисков, связанных с некоторыми проблемами безопасности, например с уже известными проблемами или проблемами, которыми могли воспользоваться злоумышленники. Новые быстрые ответы на угрозы предоставляются только для новейших версий iOS, iPadOS и macOS, начиная с iOS 16.4.1, iPadOS 16.4.1 и macOS 13.3.1. По умолчанию ваше устройство автоматически принимает новые быстрые ответы на угрозы. При необходимости вам будет предложено перезагрузить устройство. Для проверки настроек устройства сделайте следующее.

  • На iPhone или iPad перейдите в раздел «Настройки» > «Основные» > «Обновление ПО» > «Автообновление» и включите параметр «Ответы на угрозы и системные файлы».
  • На компьютере Mac выберите меню Apple  > «Системные настройки». Щелкните «Основные» в боковом меню, затем щелкните «Обновление ПО» в правой части окна. Нажмите кнопку «Показать детали» рядом с пунктом «Автообновление» и убедитесь, что параметр «Установить ответы на угрозы и системные файлы» включен.

При применении быстрого ответа на угрозы после номера версии ПО появляется буква, например: macOS 13.3.1 (a).

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

Сведения о конкретных быстрых ответах на угрозы см. в статье Выпуски безопасности Apple.

Дата публикации: 31 августа 2023 г.
Эта страница полезна?
Благодарим вас за отзыв.

Обращение в службу поддержки Apple

Нужна помощь? Не откладывайте обращение за помощью, воспользуйтесь онлайн-связью со специалистом.

Использование средства "Формат по образцу"

Excel для Microsoft 365 Word для Microsoft 365 PowerPoint для Microsoft 365 Access для Microsoft 365 OneNote для Microsoft 365 Классический клиент Project Online Publisher для Microsoft 365 Visio, план 2 Excel 2021 Word 2021 PowerPoint 2021 Access 2021 Project профессиональный 2021 Project стандартный 2021 Publisher 2021 Visio профессиональный 2021 Visio стандартный 2021 OneNote 2021 Excel 2019 Word 2019 PowerPoint 2019 Access 2019 Project профессиональный 2019 Project стандартный 2019 Publisher 2019 Visio профессиональный 2019 Visio стандартный 2019 Excel 2016 Word 2016 PowerPoint 2016 Access 2016 OneNote 2016 Project профессиональный 2016 Project стандартный 2016 Publisher 2016 Visio профессиональный 2016 Visio стандартный 2016 Excel 2013 Word 2013 PowerPoint 2013 Access 2013 OneNote 2013 Project профессиональный 2013 Project стандартный 2013 Publisher 2013 Visio профессиональный 2013 Visio 2013 Excel 2010 Word 2010 PowerPoint 2010 Access 2010 OneNote 2010 Project стандартный 2010 Publisher 2010 Visio премиум 2010 Visio 2010 Visio стандартный 2010 Excel Starter 2010 InfoPath 2013 InfoPath Filler 2013 Project для Office 365 Еще. Меньше

Используйте формат по образцу, чтобы быстро применить одно и то же форматирование, например цвет, стиль шрифта и размер или стиль границы, к нескольким фрагментам текста или графики. С помощью форматирования по образцу вы можете скопировать все форматирование из одного объекта и применить его к другому объекту. Это считается копированием и вставкой для форматирования.

    Выделите текст или графический объект, форматирование которого вы хотите скопировать.

Примечание: Чтобы скопировать форматирование текста, выделите часть абзаца. Чтобы скопировать форматирование как текста, так и абзаца, выделите абзац целиком вместе со знаком абзаца.

Кнопка

На вкладке Главная выберите Формат по образцу в группе Буфер обмена.

Кнопка

Кнопка

В Outlook из нового сообщения или ответа выберите Формат по образцу на вкладке Сообщение в группе Буфер обмена.

Кнопка

Если Outlook использует упрощенную ленту, формат по образцу выполняется самостоятельно.

Упрощенная кнопка

  • Курсор изменится на значок Отображение курсора форматирования по образцу с помощью кистикисти.
  • Проведите кистью по выделенному тексту или изображению, чтобы применить форматирование. Это можно сделать только один раз. Чтобы изменить формат нескольких выделенных элементов в документе, необходимо сначала дважды щелкнуть Кнопка формат по образцу.
  • Чтобы завершить форматирование, нажмите клавишу ESC.
    • Для копирования формата можно использовать клавиши CTRL+SHIFT+C, а для вставки формата — CTRL+SHIFT+V. Хотя курсор не меняется на кисть, можно многократно вставлять форматирование в несколько областей без повторного копирования.
    • Для графики формат по образцу лучше всего подходит для объектов рисования, таких как автофигуры. Тем не менее вы можете скопировать форматирование из изображения (например, его границу).

    Команда Ping

    В этой статье мы расскажем, что делает команда Ping, и разберём, где может понадобиться команда Ping.

    Ping: описание команды

    Серверы требуют постоянной диагностики своих систем. Одним из базовых инструментов, который помогает в администрировании сервера, является утилита Ping. Её основная задача ― определение работоспособности узла, сайта или сервера в интернете.

    Как это работает? Команда Ping в cmd посылает небольшие пакеты на сервер, который нужно проверить. Через некоторое время от сервера приходит ответ ― те же пакеты, что и были отправлены. Исходя из этого ответа оценивается работоспособность сервера. Устройство работает нормально, если отправленные пакеты вернулись полностью и быстро.

    Кроме проверки доступности удаленного хоста, с помощью этой команды можно:

    • измерить время, за которое сервер отвечает на команду,
    • выявить IP-адреса хоста в локальной и глобальной сети,
    • определить качество соединения (были ли потеряны пакеты в пути),
    • внедрить команду в bash-скрипт для автоматической проверки сетевого устройства.

    Обратите внимание

    Если вы используете прокси-сервер, команда пинг работать не будет, так как для её действия нужно прямое соединение с устройством.

    У команды есть несколько параметров, которые предназначены для разных задач. Чтобы посмотреть все возможные опции, введите в командной строке:

    ping /?

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *