В чем разница между istringstream, ostringstream и stringstream? / Почему бы не использовать stringstream в каждом случае?

Когда я буду использоватьstd::istringstream, std::ostringstream а такжеstd::stringstream и почему я не должен просто использоватьstd::stringstream в каждом сценарии (есть ли проблемы с производительностью во время выполнения?).

Наконец, есть ли что-то плохое в этом (вместо того, чтобы использовать поток вообще):

std::string stHehe("Hello ");

stHehe += "stackoverflow.com";
stHehe += "!";