Mylisz pojęcia :D. Optymalizacja to ulepszanie działającego rozwiązania. Ten program nie ma prawa spełniać założeń :P.
Funkcja pro zawsze zwraca 1.0 :D I do tego w pętli - która skończy się po pierwszym returnie. Ponadto przekazane argumenty nie są wykorzystywane, więc funkcje pro można by skrócić do jednej linijki - return 1.0;. W mainie też bardzo ciekawa konstrukcja:
for (int j = 0; j < 1; j++)
Po co robić pętle gdy chcemy zrobić coś dokładnie jeden raz?
Ta konstrukcja też strasznie zaciemnia to co chciałeś - lub nie - zrobić:
std::cout << pro(&t[j], o);
zmienna j w tej "pętli" ma wartość 0, więc efektywnie przekazujesz początek tablicy, czyli zwykłe t. Gdyby jednak pętla miała wykonać się wiecej niż 1 raz to przekazywałbyś kawałek tablicy. Ten kod nie ma sensu, więc ciężko powiedzieć czy to było zamierzeniem. Piszę, bo to rzadko spotykana konstrukcja.