как это объявление внутренне работает?
Точно так же, как объявление в области имен, за исключением того, что имя видно только в пределах блока, в котором оно объявлено (в данном случае, функция тела).ОБНОВЛЕНИЕ: как указывает @Nawaz, есть одно или два дополнительных ограничения, которые применяются к локальным классам: они не могут иметь статические члены-данные и (в C ++ 03, но не в C ++ 11) их нельзя использовать какаргументы типа шаблона.
имеет ли это какие-либо негативные последствия для производительности?
Нет, кроме его области действия (которая влияет только на то, компилируется ли код),идентичен любому другому определению класса.