C++中 const 关键字使用场景
目录
C++ 类声明(待完善)
const 成员函数
const成员函数相当于提醒编译器,这个函数不会修改类的成员变量
const 成员变量
const成员变量可以使用初始化列表的方式初始化(C++ 11开始)
返回值为const的成员函数
C++ const修饰函数参数
目的是保证实参或实参指向的内存中的内容不被修改
1. 函数形参(parameter)为指针或者引用类型时,使用const修饰是有意义的,这块const指出了不能通过形参修改实参指向的内存块内容
2. 函数参数传入方式为,值传递类型(int, char, 等等) 时,使用const是没有意义的,因为值传递会复制实参的内容给形参,函数中不可能通过形参来修改实参
const修饰其他变量
const 全局变量
1. const 指针变量(const char* p = ""), 表示指针只能指向只读的内存块(可以改变,但是必须是只读块)
也意味着不能直接通过这个const指针变量(p)来修改内存块中的内容,但是可以通过别的方式修改。
// 取自 Google leveldb源码中的 c_test.c
const char* phase = ""; // 表示指针可以指向其他只读内存块
static void StartPhase(const char* name) {
fprintf(stderr, "=== Test %s\n", name);
phase = name;
}
我自己的试验:
const char* read_only_str = "00";
void show_test(const char* input) {
std::cout << read_only_str << std::endl;
std::cout << "===============" << std::endl;
read_only_str = input;
std::cout << read_only_str << std::endl;
}
int main() {
char str[7] = "Hello";
show_test(str);
str[3] = 'Y';
std::cout << read_only_str << std::endl;
return 0;
}
输出结果:
00
===============
Hello
HelYo
2. const指针
char* const p = "iudsfi"; // 表示指针p不能改变,也就是p不能指向别的内存块
3. const变量,建议使用std::string来替代char数组