2016-06-25 4 views
0

Dieser Code kompiliert erfolgreich, und das ist, weil ich anscheinend die "globale Namespace" Version von tolower (im Gegensatz zu einer der Versionen, die in oder <locale> leben) eigentlich bin ich nicht sicher ?.Wo/wie ist die globale Toleranz definiert und welche anderen ähnlichen Funktionen gibt es?

#include <string> 
#include <algorithm> 

int main() { 
    std::string x = "FOO"; 
    std::transform(x.begin(), x.end(), x.begin(), tolower); 
} 

Meine Fragen:

1) Wo/wie ist diese tolower genau festgelegt?

2) Kann mich jemand zu einer Liste aller solcher "globalen Namespace" -Funktionen führen?

Ich habe tatsächlich ziemlich viel Zeit damit verbracht, eine Antwort zu suchen; Entschuldigung, wenn das offensichtliche Wissen ist und ich es verpasst habe.

+1

http://en.cppreference.com/w/c/string/byte/tolower –

+3

Es wird wahrscheinlich indirekt über einen der anderen Header (in einer implementierungsdefinierten Weise) eingezogen. –

Antwort

1

Einige Compiler bieten Deklarationen aus <c__> Headern (von C-Standardbibliothek) in std:: und globalen Namespace. Wie @ Chris sagte, dies ist nach dem Standard erlaubt, aber es gibt keine Garantien. Daher sollten Sie sich nicht darauf verlassen.

+3

Es ist konformes Verhalten, Deklarationen in beide Namespaces aufzunehmen, aber nicht garantiert. – chris

+0

@chris Danke, hinzugefügt. – HolyBlackCat

Verwandte Themen