C++类函数后面加const的作用
# c++类函数后面加const的作用
Created: March 19, 2024 11:46 AM
在C++中,在类成员函数的声明和定义末尾添加**const
关键字有特殊的含义。这表明该成员函数是const
-qualified,意味着它不会修改对象的任何成员变量(除了那些用mutable
**关键字标记的变量)。这种函数可以被称为“常量成员函数”。
# 常量成员函数的特点和作用:
- 保证不修改对象状态:通过将成员函数声明为**
const
,你向编译器和其他程序员保证,调用该函数不会改变对象的状态。这包括不修改成员变量和不调用任何非const
**成员函数。 - 允许在常量对象上调用:只有**
const
成员函数可以在常量对象上调用。这意味着如果你有一个const
对象(或const
引用/指针),你只能调用它的const
**成员函数。
# 示例:
cppCopy code
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
int getValue() const { // 常量成员函数
return value;
}
void setValue(int v) { // 非常量成员函数
value = v;
}
};
int main() {
MyClass obj(10);
const MyClass constObj(20);
std::cout << constObj.getValue() << std::endl; // 合法,因为getValue()是const成员函数
// constObj.setValue(30); // 非法,因为setValue()是非const成员函数
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
在上述示例中,getValue()
函数后面加了const
,表示这个函数不会修改任何成员变量。因此,即使对于**const
对象constObj
,也可以调用getValue()
函数。相反,setValue()
函数尝试修改成员变量,所以它不是const
成员函数,不能在const
**对象上调用。
# 为什么使用常量成员函数?
- 增强代码安全性:防止函数无意中修改对象状态。
- 提高代码可读性和维护性:**
const
**成员函数清楚地表明了函数的意图,即不改变对象状态。 - 支持常量和非常量代码重用:允许同一个函数在常量和非常量对象上被重用,增加了代码的灵活性。
总之,合理使用**const
**成员函数是C++编程中的一种良好实践,有助于编写更安全、更清晰的代码。
编辑 (opens new window)