短路评估与2017 C

Short circuit evaluation VS 2017 c++

本文关键字:2017 评估 短路      更新时间:2023-10-16

我正在尝试使用std :: string从用户获取一个数字,并想先检查字符串是否为空并且仅包含数字,然后检查是否是否在那里高于零

当我构建它并按Enter时,我会在Stoi函数上获得无效参数的例外。

我在较旧版本的VS(2012(中尝试并获得相同的错误。

短路评估对vs?

是否有效
static const bool is_number(const char caracter)
{
    return(caracter >= '0' && caracter <= '9');
}
template <typename T> static const bool all_numbers(const T &str)
{
    if (!str.empty())
    {
        auto it = str.cbegin();
        if ((str.front() == '+' || str.front() == '-') && (str.size()>1)) ++it;
        for (it; it != str.cend(); ++it) if (!is_number(*it))  return false;
        return true;
    }
    else return false;
}
int main()
{
    std::string str;
    do
    {
        std::cout << " Number: ";
        getline(std::cin, str);
        std::cin.clear();
    }while (!all_numbers(str) && std::stoi(str) <= 0);
    return 0;
}

当然在Visual Studio中短路作品,您可以轻松地自己验证了这一点。

但是,您的逻辑是错误的:

(!all_numbers(str) && std::stoi(str) <= 0);

在这里,您仅执行stoi,如果输入不是所有数字。显然是向后的。

我认为也许您是要写||