C++中三种带有const修饰的MyClass成员函数有何区别?
三种MyClass成员函数中const修饰符的作用区别
下面逐个拆解三种写法里const的具体作用:
第一种:修饰函数返回值
const int MyClass::showName(string id){ ... }
这里的const直接修饰函数的返回值,意味着函数返回的int值是只读的,不能被当作左值修改。比如你写obj.showName("123") = 10;这类代码会直接触发编译错误,因为返回的int具备const属性,不允许赋值操作。
第二种:修饰函数参数
int MyClass::showName(const string id) { ... }
这里的const修饰的是函数的参数id,表示在函数内部不能修改这个参数的内容。比如在函数里执行id = "new_id";这类赋值操作是不合法的。这么写主要是约束函数内部的操作,避免误改参数,同时也能让函数更安全地接收const类型的实参。
第三种:修饰成员函数本身
int MyClass::showName(string id) const{ ... }
这个const放在函数参数列表末尾,用来标记整个成员函数为常成员函数,它有两个关键限制:
- 函数内部不能修改类的任何非static成员变量;
- 函数内部不能调用类的非const成员函数。
另外,const类型的类对象只能调用这类const成员函数,而非const对象既可以调用const成员函数,也可以调用非const成员函数。这种写法通常用于那些只做读取操作、不会改变对象状态的函数。
内容的提问来源于stack exchange,提问作者Harshvardhan Singh
相关产品推荐
相关产品推荐

