栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ const 修饰function

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ const 修饰function

const 除了可以修饰变量之外还可以修饰函数, 主要有以下三种用法: 修饰返回值, 修饰形参,修饰成员函数.

1.修饰返回值 const int& fun(int& a)

这种多是修饰返回值是引用类型的情况下,为了避免返回值被修改的情况。返回值是引用的函数, 可以肯定的是这个引用必然不是临时对象的引用, 因此一定是成员变量或者是函数参数, 所以在返回的时候为了避免其成为左值被修改,就需要加上const关键字来修饰。
函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()。

#include
using namespace std;
class A
{
private:
    int data;
public:
    A(int num):data(num){}
    ~A(){};
    // const int& get_data()
    int& get_data()
    {
        return data;
    }
};

int main()
{
    A a(1);
    a.get_data()=3;
    cout< 
上面这个例子中如果写成`const int& get_data()`, main函数就会报错, 因为对一个const的返回值进行了赋值.
2.修饰形参 int& fun(const int&a)
多数情况下,我们都会选择 pass by reference,这样可以节省内存,并且可以起到改变实参的目的。不过有的时候我们并不希望改变实参的值,就要加上const关键字。在构造接口之前一定要思考函数是否会修改参数,如果不会修改的话一定要加上const,这个是代码写的是否大气的一个标准。
Note: 如果函数不传入const的值就意味着这个值要被改变, 这种情况下可以通过传指针&或者return的形式, 比较清晰.
3.修饰成员函数 inti& fun(inti& a) const{}

const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。
函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

#include 

using namespace std;

class Student {
 public:
  Student(char *name, int age, float score);
  void show();
  //声明常成员函数
  char *getname() const;
  int getage() const;
  float getscore() const;

 private:
  char *m_name;
  int m_age;
  float m_score;
};

Student::Student(char *name, int age, float score)
    : m_name(name), m_age(age), m_score(score) {}
void Student::show() {
  cout << m_name << "的年龄是" << m_age << ",成绩是" << m_score << endl;
}
//定义常成员函数
char *Student::getname() const { return m_name; }
int Student::getage() const { return m_age; }
float Student::getscore() const { return m_score; }

int main() {
  Student student("Finn", 25, 98);
  student.show();
  return 0;
}

getname()、getage()、getscore() 三个函数的功能都很简单,仅仅是为了获取成员变量的值,没有任何修改成员变量的企图,所以我们加了 const 限制,这是一种保险的做法,同时也使得语义更加明显。

Reference:
https://zhuanlan.zhihu.com/p/110159656
http://c.biancheng.net/view/2230.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867142.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号