002
21.02.2009, 22:01 Uhr
0xdeadbeef
Gott (Operator)
|
Dass das überhaupt funktioniert, ist eigentlich ziemlich erstaunlich, und ob es mit jedem Compiler funktioniert, wage ich stark zu bezweifeln.
std::setiosflags funktioniert mit selective flags nicht, d.h., left, right, internal, dec, oct, hex, fixed und scientific können damit nicht gesetzt werden. Es ruft ja nur setf mit dem übergebenen Parameter auf, und da
C++: |
std::cout.setf(std::ios::left); // FALSCH! std::cout.setf(std::ios::left, std::ios::adjustfield); // Richtig.
|
ergibt sich diese Problematik. Wenn die Implementierung straightforward ist, wird vermutlich beim ersten mal das left-bit gesetzt (was es vermutlich eh schon ist), beim zweiten mal das right-bit, und von da an sind beide gesetzt und die weiteren Aufrufe bringen nichts mehr - verlassen kann man sich darauf aber genausowenig wie darauf, was passiert, wenn beide bits gesetzt sind.
Zum Glück gibt es aber ja dedizierte Manipulatoren dafür:
C++: |
#include <iostream> #include <iomanip>
int main() { std::cout << std::left << "#" << std::setw(10) << "Tach" << "#\n" << std::right << "#" << std::setw(10) << "Tach" << "#\n" << std::left << "#" << std::setw(10) << "Tach" << "#\n" << std::right << "#" << std::setw(10) << "Tach" << "#" << std::endl; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 21.02.2009 um 22:02 Uhr von 0xdeadbeef editiert. |