首页 > 解决方案 > 优化条件

问题描述

我对ifand fororwhile循环中的条件有一个简单的问题。有什么方法可以让我用更少的代码来验证这个条件吗?

if (are_you_sure != "Si" && are_you_sure != "si" && are_you_sure != "No" && are_you_sure != "no")

我不认为我可以最小化上面的代码,但我想确定一下。

标签: c++if-statement

解决方案


如果您有一个可以为您执行此操作的函数,您可以编写更少的代码并使其更具可读性:

if (none_of( are_you_sure, "Si", "si", "No", "no"))
  // ...

当然,这个函数是必须要写的,但是用 c++17 fold-expressions 的代码并不多:

template<typename T, typename ...Opts>
auto none_of(T val, Opts ...opts)
{
    return (... && (val != opts));
}  

这有一些不错的属性;它可以接受任意数量的参数,也可以用于字符串以外的类型:

int n = 42;
if (none_of( n, 1, 2, 3))
  // ...

确保为函数命名好,因为这会极大地影响可读性。


推荐阅读