VS2010で、charが署名されていることがわかりました。 は比較にデバッガのステップ実行、私は最終的にコードを打つ:
template<> struct char_traits<char>
{ // properties of a string or stream char element
typedef char _Elem;
typedef _Elem char_type;
typedef int int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef _Mbstatet state_type;
static int __CLRCALL_OR_CDECL compare(const _Elem *_First1, const _Elem *_First2,
size_t _Count)
{ // compare [_First1, _First1 + _Count) with [_First2, ...)
return (_CSTD memcmp(_First1, _First2, _Count));
}
// etc
};
だから、本当の比較ですがmemcmpに沸きます。それをチェックすると、「unsigned char値として評価される」ということがわかります。したがって、問題です。
Cf. Arytomの答え - 興味深い、私はこれを知らなかった。それを見てください:
char_traits州の1998年の標準21.1.3.1:6では、組み込みオペレータ<と同じように定義されています。
N3126ドラフト、21.2.3.1:5は、それがunsigned charの場合と同じであることを示しています。
これは古いテキストブックから手に入りましたか? – silent