C++的const关键字

打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

在 C++ 中,const 关键字用于声明常量,表现某个变量或对象的值在初始化后不可改变。const 可以应用于多种上下文,包括变量、函数参数、成员函数和指针等。下面详细介绍 const 的各种用法:
1. 常量变量

const 可以用来声明常量变量,这些变量在初始化后不能被修改。
  1. const int a = 10; // a 是一个常量,不能被修改
  2. // a = 20; // 错误:不能修改常量
复制代码
2. 常量指针

const 可以用于指针,表现指针所指向的数据是常量,或者指针本身是常量,或者两者都是常量。


  • 指针指向常量数据
    1. const int* p = &a; // p 指向常量数据,不能通过 p 修改 a
    2. // *p = 20; // 错误:不能修改常量数据
    3. p = &b; // 正确:可以改变 p 指向的地址
    复制代码
  • 常量指针
    1. int* const p = &a; // p 是常量指针,不能改变 p 指向的地址
    2. // p = &b; // 错误:不能改变常量指针的地址
    3. *p = 20; // 正确:可以修改 p 指向的数据
    复制代码
  • 常量指针指向常量数据
    1. const int* const p = &a; // p 是常量指针,指向常量数据
    2. // *p = 20; // 错误:不能修改常量数据
    3. // p = &b; // 错误:不能改变常量指针的地址
    复制代码
3. 常量引用

const 可以用于引用,表现引用所绑定的对象是常量。
  1. const int a = 10;
  2. const int& ref = a; // ref 是常量引用,不能通过 ref 修改 a
  3. // ref = 20; // 错误:不能修改常量引用
复制代码
4. 常量成员函数

const 可以用于成员函数,表现该成员函数不会修改类的成员变量。
  1. class MyClass {
  2. public:
  3.     int getValue() const; // 常量成员函数
  4. private:
  5.     int value;
  6. };
  7. int MyClass::getValue() const {
  8.     return value; // 可以读取成员变量,但不能修改
  9.     // value = 20; // 错误:不能在常量成员函数中修改成员变量
  10. }
复制代码
5. 常量参数

const 可以用于函数参数,表现传入的参数是常量,函数内部不能修改这些参数。
  1. void print(const std::string& str) {
  2.     // str = "Hello"; // 错误:不能修改常量参数
  3.     std::cout << str << std::endl;
  4. }
复制代码
6. 常量表达式

C++11 引入了 constexpr 关键字,用于声明编译时常量表达式。
  1. constexpr int add(int a, int b) {
  2.     return a + b;
  3. }
  4. constexpr int c = add(10, 20); // c 是编译时常量
复制代码
7. 常量成员变量

const 可以用于类的成员变量,表现该成员变量在初始化后不能被修改。
  1. class MyClass {
  2. public:
  3.     MyClass(int v) : value(v) {} // 初始化常量成员变量
  4.     int getValue() const { return value; }
  5. private:
  6.     const int value; // 常量成员变量
  7. };
复制代码
总结

const 关键字在 C++ 中重要用于确保数据的不可变性,进步代码的可读性和安全性。合理利用 const 可以帮助编译器捕获匿伏的错误,并使代码更加清晰和可靠。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表