ения STL в стандарт С++, члены

Автор admin Пятница, 22 мая 2009 11:32

ения STL в стандарт С++, члены комитета по стандартизации С++ обменивались друг с другом интересными и удивительными примерами вроде следующего1: //: С05:Factorial.срр // Вычисление факториала на стадии компиляции! #include using namespace std; tempiate struct Factorial { enum {val = Factorial::val * n}; }: tempiate<> struct Factorial<0> { enum {val = 1}; }: int mainO { cout « Factorial<12>::val « endl: // 479001600 } ///:- Программа выводит правильное значение 12!, и это нормально. Удивляет другое — результат вычисляется еще до запуска программы! Пытаясь создать специализацию Factorial<12>, компилятор выясняет, что он также должен создать специализацию Factorial, для которой нужна специализация Factorial<10> и т. д. Рекурсия заканчивается на специализации Factorial, после чего вычисления проводятся в обратном направлении. В конечном счете переменная Factorial<12>::val замещается целочисленной константой 479 001 600, и компиляция завершается. Поскольку все вычисления выполняются компилятором, участвующие в них значения должны быть константами времени компиляции, отсюда и ис


Комментарии закрыты.