C++ STL:字符串迭代器出现问题

Nic*_*ner 1 c++ iterator stl

我正在制作一个简单的命令行Hangman游戏.

void Hangman::printStatus()
{
    cout << "Lives remaining: " << livesRemaining << endl;
    cout << getFormattedAnswer() << endl;
}

string Hangman::getFormattedAnswer()
{
    return getFormattedAnswerFrom(correctAnswer.begin(), correctAnswer.end());
}

string Hangman::getFormattedAnswerFrom(string::const_iterator begin, string::const_iterator end)
{
    return begin == end? "" : displayChar(*begin) + getFormattedAnswerFrom(++begin, end);
}

char Hangman::displayChar(const char c)
{
    return c;
}
Run Code Online (Sandbox Code Playgroud)

(最后,如果用户已经猜到了,我会更改它以displayChar()显示一个-或一个字符,但为了简单起见,我现在只返回所有内容.)

当我从VS 2010构建并运行它时,我得到一个弹出框:

调试断言失败!

xstring线:78

表达式:字符串迭代器不可解除引用

我究竟做错了什么?

Dan*_*ien 8

问题在于评估:

displayChar(*begin) + getFormattedAnswerFrom(++begin, end)
Run Code Online (Sandbox Code Playgroud)

在执行此语句时,很明显您的编译器首先递增begin,返回"next" begin以用作第一个参数getFormattedAnswerFrom,然后取消引用begin参数displayChar.

如果begin是一个落后end,那么begin != end这样displayChar(*begin) + getFormattedAnswerFrom(++begin, end)就会运行.您的编译器递增begin,所以现在begin == end,取消引用begin无效.

另请参阅:C++函数参数中的评估顺序