原则:Effectiv C++条款三: 尽可能使用const
1、将某些东西声明为const可帮助编译器侦测出错误的用法。const可被施加于任何作用域内的对象、
函数参数、函数返回值类型、成员函数本体。
2、编译器强制实施bitwise constness,但你编写程序的时候应该使用“概念上的常量性(conceptual constness)”
3、当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。
注: 第三条有待于个人实践;我觉得没有必要为了一点点代码复用,弄得代码很难懂。
const成员函数的用法:
1、const和non-const成员函数是重载模式;
2、非const对象可以调用const和non-const成员函数;
3、const对象只能调用const成员函数
<pre name="code" class="cpp"><span style="font-size:12px;">#ifndef __TEST_H__
#define __TEST_H__
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
class Test
{
public:
Test();
void method1() const;
void method2();
void method3() const;
void method3();
protected:
int a;
int b;
};
#endif</span>
#include"test.h"
Test::Test() : a(1),b(2)
{
return;
}
void Test::method1() const
{
cout<<"method1 is const."<<endl;
return;
}
void Test::method2()
{
cout<<"method2 is not const."<<endl;
return;
}
void Test::method3() const
{
cout<<"method3 is const."<<endl;
return;
}
void Test::method3()
{
cout<<"method3 is not const."<<endl;
return;
}
<span style="font-size:12px;">#include"test.h"
int main( int argc, char** argv )
{
Test A;
const Test B;
A.method1();
A.method2();
B.method1();
// B.method2();
A.method3();
B.method3();
getchar();
return 0;
}</span>