7 c++
在数学中,符号18 < age < 30表示年龄必须介于值18和30之间.是否可以在if语句中使用这种符号?例如,我尝试过执行
if(18 < age < 30)
Run Code Online (Sandbox Code Playgroud)
我得到奇怪的输出,所以它不太正确.有没有办法做到这一点,所以我只需要写
if(age > 18) /*blah*/;
else if(age < 30) /*same blah*/;
Run Code Online (Sandbox Code Playgroud)
tib*_*bur 15
你可以做:
if (18 < age && age < 30) /*blah*/;
Run Code Online (Sandbox Code Playgroud)
Mat*_* M. 15
没有人回答你的代码究竟发生了什么,所以让我把它拆开.
考虑单一陈述: bool result = 18 < age < 30;
我们想评估右手表达式: 18 < age < 30
此表达式中有两个运算符,由于它们相同,因此它们都具有相同的优先级,在这种情况下,它们从左到右进行求值,因此表达式等效于:
(18 < age) < 30
Run Code Online (Sandbox Code Playgroud)
因此,让我们首先检查左手成员:18 < age它产生一个布尔值,该值为true或false,通常分别表示为1或0的整数值.因此表达式可以总结为:
{0,1} < 30
Run Code Online (Sandbox Code Playgroud)
这总是如此.
因此,如果你使用assert(18 < age < 30);它永远不会适得其反.
积分(和浮点)内置类型之间的隐式转换真的很烦人......
一些模板代码可以在这里提供帮助:
template <int min, int max> class range {
static bool contains(int i) { return min <= i && i < max; } // In C++, ranges usually are half-open.
};
int age = 23;
if (range<18,30>::contains(age)) { /****/ }
Run Code Online (Sandbox Code Playgroud)