面试C++时被问到关于const关键字的问题,在此总结一下。
(1)const修饰变量
const int var = 0; //const修饰变量时,必须在声明变量的同时给出定义
(2)const在方法名后修饰
class CExample(){public: int getData() const //此处的const使用,是为了保证在getData()方法中不对 //该方法生命周期之外的值进行修改,用于保护成员变量 { return m_data; }private: int m_data; }
(3)const在方法名前后修饰
class CExample(){public: const int* getData() const //后面的const是为了保护成员变量在方法 //内不会被修改(修饰成员变量) //前面的const是为了保证在外部调用该方法后, //返回值不会被篡改(修饰方法) { return &m_data; }private: int m_data; }
(4)mutable关键字的使用
class CExample(){public: const int* getData() const { m_isdone = true; return &m_data; }private: int m_data; mutable bool m_isdone; //mutable是在当无法对该方法生命周期之外的成员 //变量进行修改时,若有诸如标志位的变量需要进行修改时使用}
注:上述的概念均针对编译时有效,并不能有效防止在运行时的篡改。
另外,当我向同事请教这个问题的时候,同事对我的建议是,const这一关键字主要是为了帮助我们控制代码的逻辑,并不要为了使用const而使用。
注:原创博客,转载请注明。