大于零的数值是否等同于1?

2026-05-08 17:422阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计717个文字,预计阅读时间需要3分钟。

大于零的数值是否等同于1?

注意:本文所指出的错误示例实际上非常简单,任何C++初学者都能理解。但这种错误类型非常常见,许多严谨的代码中也可能存在这样的错误。这个Bug源于CoreCLR源代码。

错误示例:cppint main() { int a=10; int b=20; if (a==b) { cout << 相等 <

注:本文所指出的错误例子其实非常简单,任何 C++ 的初学者都能看懂。但是这个错误也非常典型,估计很多非常严肃的代码里面都存在这样的错误。

这个 Bug 是来自于 CoreCLR 源代码。

大于零的数值是否等同于1?

错误代码:

bool operator( )(const GUID& _Key1, const GUID& _Key2) const { return memcmp(&_Key1, &_Key2, sizeof(GUID)) == -1; }

解释:

你不能将 memcpy()、strcmp() 以及其他一些标准函数的返回值,和 1、-1 这些具体的数字做比较,因为这些函数的返回值只保证大于 0 或者小于 0(译注:而并不保证大于0就等于1,小于0就等于-1)。

上面那段错误的代码可能在很长时间内都能正常工作。不过那仅仅是因为运气好而已,没什么其他原因。

阅读全文

本文共计717个文字,预计阅读时间需要3分钟。

大于零的数值是否等同于1?

注意:本文所指出的错误示例实际上非常简单,任何C++初学者都能理解。但这种错误类型非常常见,许多严谨的代码中也可能存在这样的错误。这个Bug源于CoreCLR源代码。

错误示例:cppint main() { int a=10; int b=20; if (a==b) { cout << 相等 <

注:本文所指出的错误例子其实非常简单,任何 C++ 的初学者都能看懂。但是这个错误也非常典型,估计很多非常严肃的代码里面都存在这样的错误。

这个 Bug 是来自于 CoreCLR 源代码。

大于零的数值是否等同于1?

错误代码:

bool operator( )(const GUID& _Key1, const GUID& _Key2) const { return memcmp(&_Key1, &_Key2, sizeof(GUID)) == -1; }

解释:

你不能将 memcpy()、strcmp() 以及其他一些标准函数的返回值,和 1、-1 这些具体的数字做比较,因为这些函数的返回值只保证大于 0 或者小于 0(译注:而并不保证大于0就等于1,小于0就等于-1)。

上面那段错误的代码可能在很长时间内都能正常工作。不过那仅仅是因为运气好而已,没什么其他原因。

阅读全文