If its a hard parse, then it needs to go through different checks, right from the syntax of the statement to the availability of the object in question and to the privileges of the user running the statement, making it cpu intensive. If a statement is found the shared pool, then it takes all these information from there skipping the above steps, making it use lesser cpu. Despite all the these good things, if a statement remains in shared pool, it increases the number of LATCH there. As the latches serialized its bound to wait, which can decrease scalability of your application as the number of transaction increases.

HTH