size_t oder std::size_t
-
Hoi!

So oft lese ich std::size_t. Aber ist das nicht schwachsinnig?
Die Typen sind identisch und jeder STL-Header würde doch durch irgendeine C-Abhängigkeit size_t in den globalen Namensraum ziehen.Wie haltet ihr es damit?
Grüße,
Ethon
-
size_tliegt im Namensbereichstd. Wenn man jetztstdmitusing namespaceglobalisiert, kann mansize_tauch ohne dem Bereichsauflöserstd::nutzen.EDIT: Quatsch, Sorry!
Standard 17.4.3.1.4
-
Nimm
std::size_t(bzw. mach vorher einusing). Wenn du darauf hoffst, dass immer zufällig ein Header eingebunden wird, dersize_tim globalen Namespace hat, dann verlässt du dich einfach unnötig auf ein Verhalten, dass sich schon beim nächsten Compilerrelease ändern kann. Gerade beim GCC/libstdc++ sind einige Leute schon darüber gestolpert, dass das Verhalten auf einmal näher am Standard war und die "Wieso? Geht doch!"-Einstellung eben nicht reicht. Außerdem ist es ja nur konsequent, wenn dustd::stringusw. benutzt auchstd::size_tzu benutzen. Warum sollte man da eine Ausnahme machen?
-
rüdiger schrieb:
Außerdem ist es ja nur konsequent, wenn du
std::stringusw. benutzt auchstd::size_tzu benutzen. Warum sollte man da eine Ausnahme machen?Meine IDE behandelt das std:: vor dem size_t wie einen Alien.
Außerdem hab ich den Drang zwischen std::size_t und size_t zu unterscheiden, wenn ich mich mit C-APIs arbeite.Ist es garantiert,dass das klappt:
void c_func(size_t* size); std::size_t size; c_func(&size);?
Grüße,
Ethon
-
Ethon schrieb:
Ist es garantiert,dass das klappt:
Hast du im von mir geschriebenen Abschnitt im Standard nicht geschaut? Die Antwort: Ja
EDIT:
Standard 17.4.3.1.4 schrieb:
For each type T from the Standard C library, the types ::T and std::T are reserved to the implementation and, when defined, ::T shall be identical to std::T.
-
Ethon schrieb:
Meine IDE behandelt das std:: vor dem size_t wie einen Alien.
Man sollte immer die Werkzeuge an seine Arbeitsweise anpassen und nicht umgekehrt. Wenn dir deine IDE im Weg steht, dann nimm eine andere (oder schau zumindest mal in die Einstellungen).