J'ai récemment eu un problème pour créer un en stringstream
raison du fait que j'ai supposé à tort que std::setw()
cela affecterait le flux de chaînes pour chaque insertion, jusqu'à ce que je le modifie explicitement. Cependant, il est toujours désactivé après l'insertion.
// With timestruct with value of 'Oct 7 9:04 AM'
std::stringstream ss;
ss.fill('0'); ss.setf(ios::right, ios::adjustfield);
ss << setw(2) << timestruct.tm_mday;
ss << timestruct.tm_hour;
ss << timestruct.tm_min;
std::string filingTime = ss.str(); // BAD: '0794'
Donc, j'ai un certain nombre de questions:
- Pourquoi est-
setw()
ce ainsi? - Y a-t-il d'autres manipulateurs de cette façon?
- Y a-t-il une différence de comportement entre
std::ios_base::width()
etstd::setw()
? - Enfin, existe-t-il une référence en ligne qui documente clairement ce comportement? La documentation de mon fournisseur (MS Visual Studio 2005) ne semble pas le montrer clairement.