std::ctype<char>::blank
-
hi leute
ist es normal das
std::ctype<char>::blankfuer'\n'true zurueck gibt ?folgender code:
std::cout << isblank('\n') << std::endl << std::endl; // (1) std::cout << std::use_facet<std::ctype<char>>(std::cout.getloc()).is(std::ctype<char>::blank, '\n') << std::endl << std::endl; //(2)(1) gibt 0 zurueck und (2) gibt 1(true) zurueck.
laut der tabelle auf http://www.cplusplus.com/reference/cctype/ sollte blank nur fuer '\t' und ' ' true zurueck geben.verwende VC++ 2017 Community 15.1
Meep Meep
-
Du bist mir aber ein Greenhorn. Genau wie für alle anderen Klassifizierungsfunktionen aus
<cctype>muss das Argument alsunsigned charrepräsentierbar sein, d.h. du musst es nachunsigned charcasten.
-
Arcoth schrieb:
Du bist mir aber ein Greenhorn. Genau wie für alle anderen Klassifizierungsfunktionen aus
<cctype>muss das Argument alsunsigned charrepräsentierbar sein, d.h. du musst es nachunsigned charcasten.std::ctype::is bool is (mask m, char_type c) const;http://www.cplusplus.com/reference/locale/ctype/is/ <- auf der seite sieht man auch ein beispiel. hier wird ein (in meinem fall) char erwartet.
ein '\n' nach unsigned char casten würde auch nix aendern, weil es sowieso einen positiven wert hat.bei ::isblank müsste man acht geben wenn der zeichen als char negative waere.
-
hab jetzt mal mit Clang und gcc getestet. beide geben zeile (2) false raus.
-
Erstmal ist es voellig unerheblich, dass du mit sowohl GCC als auch Clang getestet hast, da sicherlich beide standardmaessig libstdc++ verwenden. Zweitens ist das sowieso richtig. Das default C locale klassifiziert newline nicht als blank. VC++ scheint wohl einen Bug zu haben, oder ein spezielles Locale (was auch ein Bug sein koennte).
Meep Meep schrieb:
Arcoth schrieb:
Du bist mir aber ein Greenhorn. Genau wie für alle anderen Klassifizierungsfunktionen aus
<cctype>muss das Argument alsunsigned charrepräsentierbar sein, d.h. du musst es nachunsigned charcasten.std::ctype::is bool is (mask m, char_type c) const;http://www.cplusplus.com/reference/locale/ctype/is/ <- auf der seite sieht man auch ein beispiel. hier wird ein (in meinem fall) char erwartet.
ein '\n' nach unsigned char casten würde auch nix aendern, weil es sowieso einen positiven wert hat.bei ::isblank müsste man acht geben wenn der zeichen als char negative waere.
Na auf
::isblankhabe ich mich ja auch bezogen.std::ctypekommt wohl kaum aus <cctype>.