2016-06-25 29 views
0

<cctype>または<locale>に存在するバージョンのいずれかではなく、tolowerの「グローバル名前空間」バージョンを使用しているため、このコードは正常にコンパイルされ、です。実際にはわかりません。ここで、/ toはどのように定義されていますか?

#include <string> 
#include <algorithm> 

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

私の質問:

1)/どのようにこのtolowerが正確に確立されていますか?

2)「グローバル名前空間」のすべての関数のリストに誰かを案内できますか?

私は実際に答えを求めてかなりの時間を費やしました。これが明らかな知識であれば謝罪し、私はそれを逃した。

+1

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

+3

おそらく間接的に他のヘッダーの1つを介して(インプリメンテーション定義の方法で)取り込まれています。 –

答えて

1

std::とグローバル名前空間の両方で<c__>ヘッダー(C標準ライブラリから)の宣言を提供するコンパイラーもあります。 @chrisが述べたように、これは標準で許可されていますが、保証はありません。したがって、あなたはそれに頼るべきではありません。

+3

両方の名前空間に宣言を含めるように動作していますが、これは保証されません。 – chris

+0

@chrisありがとうございました。 – HolyBlackCat

関連する問題