2D: SDL / SFML / Allegro / XNA (C#)
3D: OpenGL / DirectX / OpenSceneGraph / Ogre / XNA (C#)
Even if you do 3D I would highly recommend using SDL, it takes away a lot of the nasty OpenGL setup

Remember, converting to Android probably means you will have to re-write in Java, and iPhone you'd need to re-write in Objective C.
My current game engine is written mostly in c/c++ and works fine on iOS and Android with the same code.
You do need to write a wrapper class that creates your c++ object and calls it's functions, but that code can be re-used for all of your projects, so it's only a pain the first time

I basically have a Game class (c++) and the wrapper (java for Android, obj-c for iOS) create a Game and then call it's Game->Update() and Game->Render().
The wrapper does have to handle all of the input and pass that through to the c++ object, so any touch events, etc. will have to be captured in your wrapper and passed through to your c++ class.