// #1 Outputs NOTHING, expected "jihgfedcba"
for (auto begin = std::rbegin(a), end = std::rend(a); begin != end; ++begin)
std::cout << *begin;
std::cout << std::endl;
// #2 Outputs "jihgfedcba", as expected
for (auto begin = std::rbegin(s), end = std::rend(s); begin != end; ++begin)
std::cout << *begin;
std::cout << std::endl;
しかし、文字出力のアレイを印刷文字列の出力中に期待される出力が表示されません。
文字配列の印刷は、文字列の印刷にも影響します。#2ループの前に#1ループが書き込まれた場合、プログラムは何も出力せず、順序を逆にします。jihgfedcba
が表示されます。
私はstd::rbegin(a)
修正問題の戻り値を微調整することに気づい:
// Outputs "jihgfedcba", as expected
// notice the ++!!
for (auto begin = ++std::rbegin(a), end = std::rend(a); begin != end; ++begin)
std::cout << *begin;
std::cout << std::endl;
// Outputs "jihgfedcba", as expected
for (auto begin = std::rbegin(s), end = std::rend(s); begin != end; ++begin)
std::cout << *begin;
std::cout << std::endl;
ですが、なぜでしょうか?
私は再現できません。両方のループは私にとって同じ結果を生み出します。 const char []の場合を除いて、余分な空白が前面に印刷されています( '\ 0')。 – DeiDei
@DeiDeiは、記述された動作を示す[code](http://melpon.org/wandbox/permlink/k1RqUEKvVRxedJVf)を提供します。 –