成员函数后面加const,没有const,以及使用的区别
2011-07-20 01:10
519 查看
函数后面加const
编译器会自动给每一个函数加一个this指针。在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量的(加了mutable修饰的除外,后面有讲)。实际上,也就是对这个this指针加上了const修饰。
const
a对象将调用普通show(),b对象将调用show() const。
如果注释掉 void show() const 该成员函数,b.show()将报错。
如果注释掉void show(),程序可以正常运行,因为a.show()调用时,会将其this指针上加const
mutable关键字
关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员。
如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员。但是有些时候需要在该类函数中对类的数据成员进行赋值,这个时候就需要用到mutable关键字了。
如果m_nA前不加mutable,编译将报错 error C2166: l-value specifies const object (error C2166: 左值指定 const 对象)
编译器会自动给每一个函数加一个this指针。在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量的(加了mutable修饰的除外,后面有讲)。实际上,也就是对这个this指针加上了const修饰。
#include <iostream> using namespace std; class CTest { public: void show() const { cout << "const" << endl; } void show() { cout << "normal" << endl; } }; int main() { CTest a; a.show(); const CTest b; b.show(); system("pause"); return 0; }显示结果:normal
const
a对象将调用普通show(),b对象将调用show() const。
如果注释掉 void show() const 该成员函数,b.show()将报错。
如果注释掉void show(),程序可以正常运行,因为a.show()调用时,会将其this指针上加const
mutable关键字
关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员。
如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员。但是有些时候需要在该类函数中对类的数据成员进行赋值,这个时候就需要用到mutable关键字了。
class CTest { public: bool GetData() const { m_n1++; return m_b2; } private: mutable int m_n1; bool m_b2; };
如果m_nA前不加mutable,编译将报错 error C2166: l-value specifies const object (error C2166: 左值指定 const 对象)
相关文章推荐
- C++ 成员函数后面加const,没有const,以及使用的区别
- 成员函数后面加const,没有const,以及使用的区别
- 成员函数后面加const,没有const,以及使用的区别
- C++关于类成员函数在参数列表后加const的作用,以及使用条件
- 【c++基础】虚函数的使用以及和成员函数的区别
- CPP-基础:非静态成员函数后面加const,以及mutable修饰成员变量
- 成员函数末尾使用const关键字
- C++:在成员函数后面放const的作用
- 【c++笔记七】教你使用"const类型的对象、成员函数"和"static类型的成员函数、变量"
- 【转载】const用法详解,如何修饰变量,返回值以及成员函数
- const成员函数使用方法(对照表)
- 父类的正常成员函数子类可以使用,并不是继承下来 的,子类是怎么调用父类的函数 : 可能是利用了一种叫函数名联编的方法.没有隐藏的情况下用函数名字来决定调用的函数.
- 非静态成员函数后面加const
- cin cin.get() cin.getline() string类成员函数getline(cin,str)使用方法区别与联系
- c++调用类内部使用成员变量和inline函数的区别
- C++ 关于static_cast reinterpret_cast dynamic_cast 以及 const_cast 用于类型转换的函数使用 20180315 day7
- const的用法,特别是用在函数前面与后面的区别!!!!!!!!!!
- const的用法,特别是用在函数前面与后面的区别!
- 1.如何避免野指针2.获取字符串的两种方法。以及malloc,calloc,ralloc的使用注意点3.二维三维数组4.数组和函数的区别
- const的用法(用在函数前面与后面的区别)