短路评估VS 2017 c ++

时间:2017-04-14 15:47:00

标签: c++ visual-studio short-circuiting

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

当我构建它并按下回车时,我在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;
}

1 个答案:

答案 0 :(得分:2)

当然,Visual Studio中的短路工作,您可以轻松地自行验证。

但是,你的逻辑错了:

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

如果输入不是所有数字,那么您只执行stoi。这显然是倒退了。

我想也许你打算写||而不是?