根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
As per author below first version of compare will be undefined if two pointer pointing to different array
背景:在研究入门第5版第16章第808页C++时,我发现了两种类型的比较函数。
template <typename T> int compare(const T& v1, const T& v2)
{
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
template <typename T> int compare(const T &v1, const T &v2)
{
if (less<T>()(v1, v2)) return -1;
if (less<T>()(v2, v1)) return 1;
return 0;
}
我们原始版本的问题在于,如果用户使用两个指针调用它,并且这些指针不指向同一个数组,那么我们的代码是未定义的。
上面的这行我不清楚。
谁能解释一下上面的行?
运算符>、>=、<和><= 在应用于不同数组的指针时调用未定义的行为,根据 C 语言标准,并由C++语言标准继承。这是一种痛苦。(== 和 != 如果指针有效,则没有未定义的行为,唯一的问题是经过一个对象末尾的指针可能与指向另一个对象开头的指针相等。例如 int a, b 和 compare &a[1] 和 &b[0](。和>
less(( 函数没有这个问题。它也定义了这些情况下的行为。它定义了行为,因为C++标准是这样说的,并且由标准库的实现者来使其工作。在大多数当前的实现中,less(( 与 <一样高效。>
可以通过指针指定数组索引。
array
是一系列连续的存储位置。因此,对于有效和任意索引,数组的x
和y
之间将只有以下两种关系之一:
x < y
y < x
方法 1 简单地比较了 2 个值。因此,它也可以比较 2 个任意指针。因此,可以以有效的方式比较同一数组的任何 2 个索引(指定为指针(。因此,如果参数来自同一数组,方法一将给出有效/正确/预期的结果。
如果方法 1 与任意指针一起使用,则用户必须知道该方法给出的可能结果。
相关文章:
- 比较字符数组
- 如何在C++中比较两个char数组
- 比较if语句中的数组值和int值
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 比较 c++ 中的字符数组
- 如何将字符串字符与结构数组进行比较?
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 在C++中返回基元类型数组(Java比较)
- 谷歌测试比较指针数组的内容
- 比较嵌套 for 循环中的两个 wchar 数组?
- C++ 将二维数组索引与条件语句中的函数值进行比较
- 在 c++ 中比较不相等数组或字符串的方法
- 将子字符串与字符串数组进行比较的 IF 条件会在C++中产生错误
- 如何使用 for 循环来比较不同大小的数组
- 如何为映射和priority_queue编写比较器,其中元素是二维数组
- 比较/搜索数组中多个整数的最佳解决方案
- 从数组比较2个字符串时,程序崩溃
- C++ 更快的字符数组比较
- c++数组比较和移动?为什么苹果不动?
- 快速数组比较和替换最接近值的元素的算法.(跟踪点)