Кроме того, имеет значение, где в классе Вы объявляете друга? Имеет значение, если Вы добавляете друга класс или друг функция?
Нет, это не так. Это чисто во время компиляции: похоже на сами модификаторы доступа.
Несмотря на то, что вы пишете объявление внутри класса , на самом деле вы не добавляете друга в класс . Вы бы в основном объявили что-то еще как друг класса и просто разрешили бы ему доступ к закрытым членам класса, как если бы они были общедоступными.
Как уже упоминалось, это чисто механизм времени компиляции.