【问题标题】:'const' array to function - C++'const' 数组函数 - C++
【发布时间】:2014-10-01 09:31:58
【问题描述】:

我定义了一个函数来计算 2D 中 2 个点之间的距离,这些点是 2 个元素的数组。在函数中将数组作为常量传递或不传递时,我的“距离”函数给出了不同的结果。

这是我的代码:

#include <iostream>
#include<math.h>

using namespace std;

double distance(const double *x1,const double *x2)
{
double dist;
dist=sqrt((x1[0]-x2[0])*(x1[0]-x2[0]) + (x1[1]-x2[1])*(x1[1]-x2[1]));
return dist;
}

double distance1(double *x1,double *x2)
{
double dist;
dist=sqrt((x1[0]-x2[0])*(x1[0]-x2[0]) + (x1[1]-x2[1])*(x1[1]-x2[1]));
return dist;
}

int main() {
double x1[2],x2[2];
double val;
x1[0]=1;x1[1]=0;
x2[0]=0;x2[1]=1;

val=distance(x1,x2);
cout << val << endl;
val=distance1(x1,x2);
cout << val << endl;


return 0;
}

这样做我得到:

-2

1.41421

我不明白为什么“距离”功能与“距离1”不同。我希望得到相同的结果,但“距离”阻止我修改 x1 和 x2 数组的内容。

另外,当将两个函数命名为“距离”时,我得到了预期的结果 (1.41421),那么在这种情况下调用哪个函数?

任何帮助将不胜感激。

【问题讨论】:

    标签: function pointers parameters constants


    【解决方案1】:

    在第一种情况下,将调用函数std::distance,它返回迭代器之间的距离:

    template<class InputIterator>
      typename iterator_traits<InputIterator>::difference_type
        distance (InputIterator first, InputIterator last);
    

    只是一个不好的函数名称选择;)

    [已编辑] 正如Evert 指出的那样,请查看Why is “using namespace std;” considered bad practice?

    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2011-12-04
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2013-04-06
    相关资源
    最近更新 更多