Есть ли разница для компьютера: x**3 или x*x*x?
Для таких вопросов есть специальный инструмент. 

Препод прав. 

При возведении в маленькую натуральную степень (2-30) компилятор может использовать векторные инструкции и получить результат очень быстро. 

При использовании pow() происходит вызов специальной подпрограммы (что является относительно медленным делом), которая делает гораздо больше арифметических действий ( и работает только с числами с плавающей запятой, что потребует преобразования int->double )
x*x*x скорее всего будет транслирована в три умножения (в зависимости от флагов оптимизации и версии компилятора могут быть разные варианты, как именно по регистрам это все раскидано будет, но не суть). В любом случае, это относительно быстрые инструкции вещественного умножения (1 такт и латентность 3-4). 
pow(x,y) обычно реализована exp(y*ln(x)), и транслирована она будет с использованием инструкций fyl2x (ln2(x)) и f2xm1 (2^^x -1). а вот инструкции логарифма и экспоненты- это оооочень медленные инструкции, у логарифма под 50 тактов на исполнение и латентность больше сотни (под 150), у экспоненты- тактов под десяток и латентность порядка 30 (понятно, что у разных архитектур- числовые значения разные, но порядок величин- такой). А если ваша pow вызывается редко (а она обычно редко вызывается относительно других вычислений)- то работать она будет мало того что долго по собственно тактам исполнения, так еще и со всеми возможными штрафами к производительности. для сравнения- fmul (вещественное умножение) имеет латентность 4 и выполняется за 1 операцию.