短路评估与2017 C
Short circuit evaluation VS 2017 c++
我正在尝试使用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
,如果输入不是所有数字。显然是向后的。
我认为也许您是要写||
?
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- c++11评估顺序(未定义的行为)
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- Visual Studio 2017 不允许我创建 C++ 专用模板
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 如何使用"equal to"以外的评估编写开关语句
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 嵌套 if 中没有返回评估
- VS 2017 使用交叉编译器构建 x64 项目
- 懒惰的参数评估try_emplace?
- 在实践中,在运行时为零的乘法中是否有任何"lazy"评估
- 点云库在VS 2019中不起作用,但在VS 2017中确实有效
- 在Visual Studio 2017中使用recursive_directory_iterator
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- C++17:使用 std::optional 来评估枚举是否包含值
- 短路评估与2017 C