短路评估 VS 2017 c++
Short circuit evaluation VS 2017 c++
我正在尝试使用 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;
}
短路当然在 Visual Studio 中有效,您可以轻松地自己验证这一点。
但是,你的逻辑是错误的:
(!all_numbers(str) && std::stoi(str) <= 0);
如果输入 不是 全是数字,您在这里只执行 stoi
。那明显倒退了。
我想也许你打算改为写 ||
?
我正在尝试使用 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;
}
短路当然在 Visual Studio 中有效,您可以轻松地自己验证这一点。
但是,你的逻辑是错误的:
(!all_numbers(str) && std::stoi(str) <= 0);
如果输入 不是 全是数字,您在这里只执行 stoi
。那明显倒退了。
我想也许你打算改为写 ||
?