C++でUTF-8を解析したいと思います。新しい文字を解析するとき、それがASCIIバイトなのかマルチバイト文字のリーダーなのか、また入力文字列が残りの文字を含めるのに十分な長さなのかどうかも事前にわかりません。
簡単にするために、次の4バイトa
、、、およびに名前を付けたいと思います。また、C ++を使用しているため、参照を使用して名前を付けたいと思います。b
c
d
アクセスが安全であることがわかる前にそれらにアクセスしない限り、関数の最初にそれらの参照を定義することは有効ですか?例:
void parse_utf8_character(const string s) {
for (size_t i = 0; i < s.size();) {
const char &a = s[i];
const char &b = s[i + 1];
const char &c = s[i + 2];
const char &d = s[i + 3];
if (is_ascii(a)) {
i += 1;
do_something_only_with(a);
} else if (is_twobyte_leader(a)) {
i += 2;
if (is_safe_to_access_b()) {
do_something_only_with(a, b);
}
}
...
}
}
上記の例は、私が意味的にやりたいことを示しています。なぜこれを実行したいのかはわかりませんが、明らかに実際のコードはより複雑になるため、アクセスが安全で必要であることがわかっている場合にのみb、c、dを定義するのは冗長すぎます。