Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 'if'语句的奇数表示法_C++ - Fatal编程技术网

C++ 'if'语句的奇数表示法

C++ 'if'语句的奇数表示法,c++,C++,我正在浏览一些遗留代码,其中遇到了以下if语句 if (!(foo == bar)){ // lots of code here } 写在上面有什么好处 if (foo != bar){ } 如果是相关的,代码库是C++。 < P>它们应该是等价的,对于它们来说是普通的老数据类型,但是如果作者(un惯例)提供了一个重载的运算符用于=< /COD>而不是为!代码>则第二种编写方法将不适用于您 不过,为了可读性,我想我更愿意看到 if (foo == bar){ // do no

我正在浏览一些遗留代码,其中遇到了以下
if
语句

if (!(foo == bar)){
    // lots of code here
}
写在上面有什么好处

if (foo != bar){
}

如果是相关的,代码库是C++。

< P>它们应该是等价的,对于它们来说是普通的老数据类型,但是如果作者(un惯例)提供了一个重载的运算符用于<代码>=< /COD>而不是为<代码>!代码>则第二种编写方法将不适用于您

不过,为了可读性,我想我更愿意看到

if (foo == bar){
    // do nothing
} else {
    // lots of code here
}

尽管最清晰的方法是调整代码库以提供
=运算符,您可以采用您编写此代码的第二种方式。

对于普通的旧数据类型,它们应该是等效的,但如果作者(非常规地)为
=
而不是
提供了重载运算符,则它们肯定是等效的=则第二种编写方法将不适用于您

不过,为了可读性,我想我更愿意看到

if (foo == bar){
    // do nothing
} else {
    // lots of code here
}
尽管最清晰的方法是调整代码库以提供
=运算符,并且您可以采用您编写此代码的第二种方式。

类型(模板参数)的要求(概念)可能包括
EqualityComparable
,但不包括
NotEqualityComparable
(不存在中列出的库概念)

可比较的概念是相似的C++算法不需要大于概念(冗余)。


可比的概念是相似的:C++算法不需要比概念大(冗余)。< / P>一个非常冗长的方法,不做任何事情(实际上并没有提高可读性)。代码>(!(foo==bar))

对我来说就像一种“气味”。考虑到
,我宁愿看看
是否(!(foo==bar))
=过载不存在。空
如果
块对我来说是一种气味:)一种非常冗长的无所事事的方式(并没有真正提高可读性),我确实将该部分限定为基于意见的<代码>(!(foo==bar))
对我来说就像一种“气味”。考虑到
,我宁愿看看
是否(!(foo==bar))
=过载不存在。空
如果
块对我来说是一种气味:)欢迎使用SO。语言总是相关的。在一个糟糕的设计中,
Foo
可以是一个重载了
=
操作符的类,而不是
=一个…是的,我也这么认为。但这是一份新工作,我想我不能改变太多。我很好奇第二份工作是否会更快?第一个必须分别执行两个操作,即找出它是否相等,然后求反。第二,如果发现有点不同,可以停止比较。有人能帮忙澄清吗?@someone\u smiley:是的,多亏了第一次发现差异的“快攻”,不平等测试可以“快得多”。例如,想象一个大对象有一个“散列”字段,该字段是从所有其他字段计算出来的。如果散列值相等-您仍然需要检查所有内容。如果散列不相等,则它们是不同的。但是,您可以将==实现为!(!=),那又怎样,终极免费加速?否。在本例中,您已经看到它不是依赖于操作,而是依赖于数据。运算符==也可以在第一个差分时快速返回“false”。接线员!=在数据非常相似的情况下,仍然可以工作很长时间。欢迎访问。语言总是相关的。在一个糟糕的设计中,
Foo
可以是一个重载了
=
操作符的类,而不是
=一个…是的,我也这么认为。但这是一份新工作,我想我不能改变太多。我很好奇第二份工作是否会更快?第一个必须分别执行两个操作,即找出它是否相等,然后求反。第二,如果发现有点不同,可以停止比较。有人能帮忙澄清吗?@someone\u smiley:是的,多亏了第一次发现差异的“快攻”,不平等测试可以“快得多”。例如,想象一个大对象有一个“散列”字段,该字段是从所有其他字段计算出来的。如果散列值相等-您仍然需要检查所有内容。如果散列不相等,则它们是不同的。但是,您可以将==实现为!(!=),那又怎样,终极免费加速?否。在本例中,您已经看到它不是依赖于操作,而是依赖于数据。运算符==也可以在第一个差分时快速返回“false”。接线员!=当数据非常相似时,仍然可以工作很长时间。是的。这大概是进行此类测试的唯一好理由(尽管即使如此,我也会认为更改模板的要求以添加不平等可比性通常是正确的做法。是的。这大概是进行此类测试的唯一好理由(尽管如此,我还是认为更改模板的要求以添加不平等比较通常是正确的做法。