面试题:C++ 中 const 的作用?谈谈你对 const 的理解?

在 C++ 中,const 是一个关键字,用于定义常量或限制变量、函数、指针等的修改行为。它的主要作用是增强代码的安全性、可读性和可维护性。以下是 const 的详细作用和使用场景:


1. 定义常量

  • 作用const 用于定义常量,表示变量的值不可修改。
  • 语法
  const data_type variable_name = value;
  • 示例
  const int MAX_VALUE = 100;
  const double PI = 3.14159;
  • 优点
    • 提高代码可读性:明确表示变量的值不可修改。
    • 增强安全性:防止意外修改常量值。

2. 修饰指针

const 可以修饰指针,限制指针本身或指向的数据的修改行为。

const* 左侧

  • 作用:指向的数据是常量,不能通过指针修改。
  • 语法
  const data_type* pointer_name;
  • 示例
  const int* ptr = &x;
  // *ptr = 10; // 错误:不能修改指向的数据
  ptr = &y;    // 正确:可以修改指针

const* 右侧

  • 作用:指针本身是常量,不能修改指针的指向。
  • 语法
  data_type* const pointer_name;
  • 示例
  int* const ptr = &x;
  *ptr = 10;   // 正确:可以修改指向的数据
  // ptr = &y; // 错误:不能修改指针

const* 两侧

  • 作用:指针和指向的数据都是常量,都不能修改。
  • 语法
  const data_type* const pointer_name;
  • 示例
  const int* const ptr = &x;
  // *ptr = 10; // 错误:不能修改指向的数据
  // ptr = &y;  // 错误:不能修改指针

3. 修饰函数参数

  • 作用:防止函数内部修改传入的参数值。
  • 语法
  return_type function_name(const data_type parameter);
  • 示例
  void printValue(const int value) {
      // value = 10; // 错误:不能修改 value
      std::cout << value << std::endl;
  }

4. 修饰成员函数

  • 作用:表示该成员函数不会修改类的成员变量。
  • 语法
  return_type function_name() const;
  • 示例
  class MyClass {
  public:
      int getValue() const {
          // value = 10; // 错误:不能修改成员变量
          return value;
      }
  private:
      int value;
  };

5. 修饰返回值

  • 作用:防止返回值被修改。
  • 语法
  const return_type function_name();
  • 示例
  const int getValue() {
      return 10;
  }

  int main() {
      // getValue() = 20; // 错误:不能修改返回值
      return 0;
  }

6. 修饰对象

  • 作用:表示对象是常量,不能修改对象的成员变量(除非成员变量被 mutable 修饰)。
  • 语法
  const ClassName object_name;
  • 示例
  class MyClass {
  public:
      void setValue(int v) { value = v; }
      int getValue() const { return value; }
  private:
      int value;
  };

  int main() {
      const MyClass obj;
      // obj.setValue(10); // 错误:不能调用非 const 成员函数
      int val = obj.getValue(); // 正确:可以调用 const 成员函数
      return 0;
  }

7. const 的优

  1. 增强安全性
    • 防止意外修改常量值或对象状态。
  2. 提高可读性
    • 明确表示变量、函数或对象的不可修改性。
  3. 优化性能
    • 编译器可以对 const 变量进行优化。
  4. 支持函数重载
    • const 可以用于区分函数重载。

8. 总结

使用场景作用
定义常量定义不可修改的常量。
修饰指针限制指针或指向的数据的修改行为。
修饰函数参数防止函数内部修改参数值。
修饰成员函数表示成员函数不会修改类的成员变量。
修饰返回值防止返回值被修改。
修饰对象表示对象是常量,不能修改对象的成员变量。

const 是 C++ 中非常重要的关键字,合理使用它可以提高代码的安全性、可读性和可维护性。

THE END
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容