Условное включение стандартных библиотек C ++ - PullRequest
0 голосов
/ 03 октября 2019

У меня есть 2 объекта, которые используют std :: string для работы. Объект A может использоваться независимо от объекта B. Однако может возникнуть ситуация, когда оба объекта A и B могут использоваться в одном и том же файле main.cpp, что может вызвать конфликт заголовков, а заголовок может быть скомпилирован дважды. Как я могу предотвратить компиляцию дважды? Я пытался использовать:

#ifndef string_H
#define string_H
#endif

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

РЕДАКТИРОВАТЬ: я использую Visual Studio 2017, поэтому я считаю, что все это написано Microsoft. Спасибо за ваши ответы, я не знал, что в std :: уже есть встроенные охранники.

1 Ответ

0 голосов
/ 03 октября 2019

как бы вы включили защиту над заголовком из стандартной библиотеки

Вы бы этого не сделали. В заголовки стандартных библиотек уже встроены средства защиты.
Редактировать:
Стандарт C ++ требует, чтобы заголовки стандартных библиотек не могли быть включены дважды, но в нем не указано, как реализация должна это делать. Однако любая реализация, соответствующая стандарту, позволит вам включать заголовки стандартной библиотеки несколько раз, не вызывая проблем.
( source )

...