在C++中,一般用const完全替代C语言的define,且功能更多。用const修饰变量,使之成为常量(或常数),这很简单,但结构体中成员如果用了const,需要注意,请看下面例子。
#include
<iostream>using namespace
std;typedef const double
CONSTANT; CONSTANT pi = 3.14159265;struct
mytype {const int
x;int
y; };int
main ( ) { //pi = 3.14; //编译出错,常量不能赋值 //常量定义必须有初始值 //mytype s; //编译出错,结构体中的x成员常量没有初始值 mytype s1 = {15, 20}; //s1.x = 3 //编译出错,常量不能赋值 s1.y = 100;const
mytype s2 = {25, 30}; //s2.y = 125; //编译出错,整个s2的所有成员都变成了常量 cout << "s1: " << s1.x << ", " << s1.y << endl; cout << "s2: " << s2.x << ", " << s2.y << endl;return
0; }
这一节的内容应该是C语言的内容,早期版本的C语言不支持const,现在已经完全支持。
用const修饰类的成员函数,可以使函数内不能对任何成员变量修改。不是成员变量当然可以修改。
#include
<iostream>using namespace
std;class
classA {int
x; string y;public
:void
get(int
& i, string& s)const
{int
k; k = 10; //非成员变量可以修改 //x = k; //成员变量不能修改 //y = "小雅"; //成员变量不能修改 i = x, s = y; }void
set(int
i, string s) { x = i; y = s; } };int
main ( ) { classA ca; ca.set(100, "劝学网");int
i; string s; ca.get(i, s); cout << s << "--" << i << endl;return
0; }
用mutable修饰成员变量,可以使该成员变量即使在const成员函数中也能被修改。
#include
<iostream>using namespace
std;class
classA { int x;mutable
string y;public
:void
get(int
& i, string& s)const
{int
k; k = 10; //非成员变量可以修改 //x = k; //成员变量不能修改 y = "小雅"; //mutable变量可以修改 i = x, s = y; }void
set(int
i, string s) { x = i; y = s; } };int
main ( ) { classA ca; ca.set(100, "劝学网");int
i; string s; ca.get(i, s); cout << s << "--" << i << endl;return
0; }