美文网首页
函数定义上const不同位置的不同作用以及报错记录

函数定义上const不同位置的不同作用以及报错记录

作者: wyx233 | 来源:发表于2019-01-11 22:56 被阅读0次

函数定义

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

总结

最左不能修改返回值内容,中间不能修改返回指针指向的内容,最右不能在函数内修改成员变量。

相关文章

  • 函数定义上const不同位置的不同作用以及报错记录

    函数定义 作用 const cv::RotatedRect* getRect();代表函数的返回值内容不能改变,此...

  • js面试题

    1、let、var、const区别 1、作用域不同,var是函数作用域,而let是块作用域2、 let不能在定义之...

  • [进阶]C++:函数重载

    定义重载函数 重载函数是函数名相同但是参数列表不同的函数 重载和const形参 const_cast 在重载函数中...

  • 变量

    变量起作用的范围称为变量的作用域,一个变量在函数外部定义和在函数内部定义,其作用域是不同的。不同作用域内变量名可以...

  • ES6

    let,const let定义变量,const定义常量 不能重复定义 块级作用域 不存在变量提升 箭头函数 参数 ...

  • go 1.0 变量作用域

    变量定义位置的不同,分为以下三个类型,分别起作用的范围是:函数内定义的变量称为局部变量 比如 x := 5 ...

  • 19.请说出const与#define 相比,有何优点?

    Const作用:定义常量、修饰函数参数、修饰函数返回值三个作用。被Const修饰的东西都受到强制保护,可以预防意外...

  • ES6学习

    ES6 块级作用域、字符串、函数 let和const 定义变量是用块级作用域let替代var const定义不可修...

  • JavaScript之函数

    三、函数 目录:函数的定义和参数获取、变量的作用域 let const详解、方法的定义和参数的获取 1.函数的定义...

  • React Navite中的一些语法

    static 定义的数据类型不能在函数内部, 否则会报错const 声明的类型不能在函数外部,否则会报错 访问静态...

网友评论

      本文标题:函数定义上const不同位置的不同作用以及报错记录

      本文链接:https://www.haomeiwen.com/subject/yrbfdqtx.html