繁体   English   中英

在C ++中对我的删除功能进行范围检查

[英]Range checking for my remove function in c++

所以我在c ++中有一个方法,它接受一个数组并删除数组中一定数量的值。 该方法从起始值一直到但不包括结束值删除值的范围。 void dynamic_array::remove(int start, int end) {

我唯一的问题是范围检查。 因此,我建立了一种检查方法,以确保起始值和结束值不在正确的位置,但是,每当我测试代码时,它似乎都不会捕获范围异常。 这是应该检查异常的代码:

if (not (0 <= ((start <= (end < size))))){
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
    }

您不能在c ++(或大多数语言)中使用符号1 < x < 2 因此,您必须分别进行每个比较。 即。 (1<x) && (x<2) (此处不需要括号)。

如果您有兴趣,您实际上可以使用该符号,但这意味着您可能会想到的有所不同。 这意味着您首先比较1<x得出真(1)或零(0),然后将此1或0与2进行比较。

应该写

if(!(0 <= start && start <= end && end < size)){
    throw exception
}

据我所知,C ++无法理解您编写它的方式。

C ++无法以这种方式工作。 单个逻辑比较的结果是一个布尔值。 例如,第一个比较:

end < size

如果此比较为真,则结果为真值,对于所有实际用途而言,该值为1。因此,对于所有实际用途,您的表达式现在变为:

if (not (0 <= ((start <= 1)))){

这已经很荒谬了,更不用说C ++中not运算符了。 从那时起,事情几乎滚滚而下。

您只需要进行两个逻辑比较:start <end和end <= size。 如果花一点时间考虑一下,您将意识到这就是您所需要的:

if (!(start < end && end <= size))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM