I think this question has been mostly answered here already but would like to throw in a couple words at a higher level perspective that might help some others going down this same path.
You can of course use C++ for microcontroller projects, but you'll want to avoid the majority of C++ paradigms.
Want to be "C+"; closer to C than the Object Oriented Programming (OOP) side.
In particular avoid most instanced things like in general C++ objects. And avoid code memory hogging paradigms like templates, etc.
You can setup a malloc(), so there is a C++ new/delete but most of the time you'll want to structure your code so there is next to no dynamic allocations.
Not only because these add more code space bulk but you'll end up just using more of the limited 20kb RAM. Just to have a dynamic allocate you have to have some minimal linked list or similar to maintain the blocks of RAM et al.
Really, probably, you want to just use parts of the convince features of C++ like the loosening of variable scope restrictions, etc.
You'll probably want to just use the minimal C libraries that you can get on the ST website and/or other places.
For cheap low cost microcontroller projects, one of the arts of it is minification. Depending on the scope of you project of course. For something complex, with a lot of features, you might be hard pressed fitting everything in just the 64kb flash ROM space.
Some other options are getting a beefer microcontroller and/or adding an I2C EEPROM for more code space (that you'ed probably have to page in and out of RAM for running code use).
As a strategy, you'll probably just want to utilize the stack (local static sized character arrays) to use and manipulate dynamic strings and use good old C library types like strcpy(), sprintf(), etc.