类型修饰符const关键字

本文详细解析了C++中常变量、常引用、常对象、常成员函数及常数组的概念与使用,包括它们如何限制对数据的修改以及在函数参数中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常变量 const int a = 1;

常引用 void fun(const int &x, const int &y);

常对象 const  stu_t stu1;

常成员函数stu_t::fun(void) const; 不能修改成员变量,也不能通过调用其他成员函数来修改成员变量

常数组 int const a[5] = {1,2,3,4,5};

常指针 const uint8_t *p1; uint8_t const *p2;  uint8_t *const p3;


常变量

const int a=5; 与 int const a=5; 等同

常指针

char *const cp; //到char的const指针

char const *pc1; //到const char的指针

const char *pc2; //到const char的指针(后两个声明是等同的)

cp is a const pointer to char. 故pc不能指向别的字符串,但可以修改其指向的字符串的内容

pc2 is a pointer to const char. 故*pc2的内容不可以改变,但pc2可以指向别的字符串

const修饰函数传入参数

调用函数不能够修改对象的值。同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。通常修饰指针参数和引用参数:

void Fun(const uint8_t *infoframe); //修饰指针型传入参数

void Fun(const uint8_t &in); //修饰引用型传入参数


### C++ 中 `const` 关键字修饰函数 在 C++ 中,`const` 关键字用于声明成员函数为常量成员函数。这意味着该函数不会修改类的数据成员或调用其他非 `const` 成员函数。 当一个成员函数被定义为 `const` 后,在其内部不允许更改任何数据成员(除非这些成员被标记为 `mutable`),也不允许调用其它不是 `const` 的成员方法[^2]。 #### 声明与实现方式 ```cpp class Example { public: void showInfo() const; private: int value; }; void Example::showInfo() const { // 不得在此处改变value的值 } ``` 这种特性有助于提高程序的安全性和可读性,因为开发者一眼就能看出哪些操作会改变对象状态而哪些则不会。另外值得注意的是,对于指针类型的成员变量来说,如果希望保护指向的内容不变,则需额外加上一层 `const` 限定: ```cpp class PointerExample { public: char* getData() const; private: mutable char *data; // 可变型指针, 即使是在const成员函数里也可以改写所指内存区域 }; char* PointerExample::getData() const { return data; } ``` 此外,通过给不同版本的方法签名附加不同的 `const` 属性还可以实现基于是否为常量实例的选择性重载功能[^3]。 ### JavaScript 中 `const` 关键字修饰函数 而在 JavaScript 中,`const` 并不直接应用于函数本身作为修饰符;相反,它是用来声明那些一旦赋初值之后就不能再重新绑定的新变量。这并不意味着不能够改变由这样的变量持有的复杂类型(比如数组、对象)中的属性值。 例如下面的例子展示了如何利用 `const` 来创建不可再次分配地址空间但仍然能对其内容做适当调整的情况: ```javascript // 定义了一个名为 greet 的匿名函数并将其赋予 greeting 变量 const greeting = function(name) { console.log(`Hello ${name}`); } greeting('World'); // 尝试覆盖原有引用将会失败 greeting = 'new string'; // TypeError: Assignment to constant variable. ``` 尽管如此,由于闭包机制的存在以及箭头表达式的引入使得我们可以更方便地构建一些具有固定行为特性的回调函数等结构化组件而不必担心它们会在后续运行期间意外丢失或者遭到篡改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值