Внутри функции main вызов sizeof(arr) вернёт 12 - т.к. в границах этой функции компилятор воспринимает arr именно как int[3].
Но вот при передаче массива в другую функцию происходит передача только указателя на начало массива и вся информация о размере теряется.
Это особенность языка C, которая переехала в C++. Но, в отличие от C, в C++ есть полноценные массивы - в виде стандартных классов array и vector. Использовать же C-style массивы в C++ большей частью не имеет смысла.