函数定义
const cv::RotatedRect* getRect();
cv::RotatedRect* const getRect();
cv::RotatedRect* getRect() const;
作用
-
const cv::RotatedRect* getRect();
代表函数的返回值内容不能改变,此处为指针的指向不能改变,但是指向对象的内容可以改变 -
cv::RotatedRect* const getRect();
如果函数返回值为指针,则代表返回的指针指向的对象内容不能改变,但是指针指向可以变 -
cv::RotatedRect* getRect() const;
代表函数内部不能对调用该函数对象内的实例成员变量做修改,也就是getRect()内部不能修改该类中任何实例变量,这里const本质上是修饰函数传入的this指针
报错记录
-
passing ‘const XXX*’ as ‘this’ argument discards qualifiers
原因:返回了const的指针后,用该指针调用了non-const的成员函数,系统无法保证成员函数不修改成员变量。
修改:将调用的成员函数改为xxx() const;
或者去掉const的修饰 -
invalid conversion from ‘const XXX*’ to ‘XXX*’
原因:在函数最后加了const修饰不想在函数中修改成员变量,但是const会修饰this指针使返回的指针为const,但是函数前没加const,系统认为你想从non-const变量转换成const
修改:在函数前面加上const或者删去函数后面的const
总结
最左不能修改返回值内容,中间不能修改返回指针指向的内容,最右不能在函数内修改成员变量。
网友评论