тельные круглые скобки внутри
Автор admin
Пятница, 22 мая 2009 11:32
тельные круглые скобки внутри вызова sizeof в STATIC_CHECK() нужны для того, чтобы компилятор не решил, будто мы пытаемся вызвать оператор sizeof для функции, что недопустимо). Чтобы сообщение об ошибке содержало полезную информацию, ключевой текст помещается в имя нового класса. Впрочем, эту методику проще всего разобрать на конкретном примере. Возьмем следующую строку в функции main(): int i – safe_cast(p): В вызове safe_cast(p) первая строка программы заменяется следующим расширением макроса (вспомните, что препроцессорный оператор ## выполняет 242 Глава 5 • Шаблоны конкатенацию своих операндов, поэтому Error_##NarrowingConversion после обработки препроцессором превращается в Error_Narrowing_conversion): { \ class Error_NarrowingConversion{}; \ sizeof(StaticCheck \ (Error_NarrowingConversion())): \ } Класс Error_Narrowing_conversion объявляется как локальный, поскольку в программе он больше нигде не используется. Оператор sizeof пытается определить размер экземпляра StaticCheck
(так как условие sizeof(void*)<=sizeof(int) истинно на всех платформах), нея
Комментарии закрыты.
Последние комментарии