C++ const转换

5
我是一名有用的助手,可以为您翻译文本。
以下是需要翻译的内容:

可能是重复问题:
为什么将(指向非常量的指针的指针)转换为(指向常量的指针的指针)不合法

我有一个函数:

bool isCirclePolygonIntersection(const Point*, const int*, const Point*,
                                 const Point**, const int*);

我试图这样调用它:

isCirclePolygonIntersection(p, &r, poly_coord, poly, &poly_size)

在这里,poly 的定义如下:

Point** poly = new Point*[poly_size];

当我尝试编译它时,出现了编译器错误:

error C2664: 'isCirclePolygonIntersection' : cannot convert parameter 4 from 'Point **' to 'const Point **'
1>          Conversion loses qualifiers

据我所了解,当函数需要一个非const参数时,您不能给函数传递一个const参数,但如果没有这种情况就可以。 有人知道问题是什么吗?谢谢。

如果你声明参数为 const Point *const *,它将会工作。(好吧,在 C++ 中它可以工作,但在 C 中不行。) - Nemo
3个回答

4

你说得对;你可以将 T * 隐式转换为 const T *。但是,你不能将 T ** 隐式转换为 const T **。参考 C 语言常见问题解答中的这篇文章:http://c-faq.com/ansi/constmismatch.html


4
Point**隐式转换为const Point**会在类型系统中开辟一个洞,因此在C ++中不存在这样的转换。
详情请参见为什么我会得到一个错误,将 Foo **Foo const **?const Point**更改为const Point * const * 将解决您的问题。
顺便问一下,为什么要使用多个间接层?也就是说,为什么要使用指针数组?我建议使用std::vector<Point>。或者Point是一个多态基类吗?

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接