Привет, ЛОР.
В заголовочных файлах OpenCV нашёл занятное:
inline
uchar* Mat::ptr(int i0, int i1)
{
CV_DbgAssert(dims >= 2);
CV_DbgAssert(data);
CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);
return data + i0 * step.p[0] + i1 * step.p[1];
}
inline
const uchar* Mat::ptr(int i0, int i1) const
{
CV_DbgAssert(dims >= 2);
CV_DbgAssert(data);
CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);
return data + i0 * step.p[0] + i1 * step.p[1];
}
Вопрос: а как компилятор понимает, к какому из этих методов обращение? У них же номенклатура параметров идентична, разница только в const
.
У меня, когда я попытался присвоить результат функции неконстантному указателю, компилятор ругнулся, мол, invalid conversion from ‘const uchar*’ {aka ‘const unsigned char*’} to ‘uchar*’ {aka ‘unsigned char*’}
. А вот константному присвоилось нормально.