Этот ответ от несколько связанного вопроса, который я задал сегодня, мог бы помочь разъяснить цели изолировать класс:
я задавал тот же самый вопрос, пока я не начал работать над допускающими повторное использование моими собственными библиотеками. Много раз Вы волнуете с определенными классами, которые просто не могут быть расширены, не требуя неясных или тайных последовательностей вызовов от конструктора.
, позволяя Вашему классу быть расширенными, необходимо спросить: если разработчик расширяет мой класс и передает этот новый класс моей библиотеке, я могу прозрачно работать с этим новым классом? Я могу работать правильно с этим новым классом? Этот новый класс действительно собирается вести себя то же?
я нашел, что большую часть времени запечатанные классы в.Net Framework имеют определенные требования под капотом, чтобы Вы не знали, и который, учитывая текущую реализацию не может быть безопасно выставлен подклассам.
Теперь переходят по той ссылке и upvote фактический автор.
Это не одно и то же. Первый не работает (тестировал в gcc 4.4.1). Сообщение об ошибке было:
test.cc:1:15: предупреждение: дополнительные токены в конец директивы #ifdef
Если вы хотите проверить, определено ли несколько элементов, используйте вторую.
Вы можете использовать определенный оператор в директива #if для использования выражений которые оцениваются как 0 или 1 в пределах линия препроцессора. Это спасает вас от с использованием вложенных директив предварительной обработки. Скобки вокруг идентификатора являются необязательными. Например:
#if defined (MAX) &&! определено (MIN)
Без использования определенного оператора, вам нужно будет включить следующие две директивы для выполнения пример выше:
#ifdef max #ifndef min