私はいくつかのコードを読んでいて、この例に出くわしました。私が理解できないのは、著者が最後の行で両方の変数から 1 のオフセットを使用する理由です。初期化されていない可能性のあるメモリ領域を参照しているため (セグメンテーション違反が発生する可能性があるため)、一見したところ、これは違法であると思います。私の頭は未定義の動作を教え続けますが、これは本当にそうですか?
static bool lt(wchar_t a, wchar_t b)
{
const std::collate<wchar_t>& coll =
std::use_facet< std::collate<wchar_t> >(std::locale());
return coll.compare(&a, &a+1, &b, &b+1) < 0;
}
最後の行が問題の行です。彼がこれを行う必要があるのはなぜですか、それは合法ですか、いつ行う必要がありますか?