MST

星途 面试题库

面试题:C++中const如何保障函数参数的类型安全

在C++中,当函数参数使用const修饰时,它是如何保障类型安全的?请举例说明,比如对于一个接受指针或引用作为参数的函数,使用const和不使用const有何区别,对类型安全有什么影响。
34.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. const在函数参数中保障类型安全的原理
    • const修饰函数参数时,它告诉编译器该参数在函数内部不应被修改。这是一种编译期的检查机制,编译器会在编译阶段对代码进行检查,如果发现对const修饰的参数进行了修改操作,就会报错,从而保障类型安全,避免意外地修改传入的数据。
  2. 指针作为参数时使用const和不使用const的区别及对类型安全的影响
    • 不使用const
      void modifyPointerValue(int* ptr) {
          *ptr = 10;
      }
      int main() {
          int num = 5;
          int* ptr = #
          modifyPointerValue(ptr);
          // 此时num的值被修改为10
          return 0;
      }
      
      • 在这个例子中,函数modifyPointerValue可以修改指针所指向的值。如果调用者不希望传入的指针所指向的值被修改,这种情况就可能导致意外的修改,破坏类型安全。
    • 使用const
      void readPointerValue(const int* ptr) {
          // *ptr = 10; // 这行代码会导致编译错误,因为ptr指向的是const int
          int value = *ptr;
      }
      int main() {
          int num = 5;
          const int* ptr = #
          readPointerValue(ptr);
          // num的值不会被函数内部修改,保障了类型安全
          return 0;
      }
      
      • 这里readPointerValue函数接受一个指向const int的指针,函数内部不能修改指针所指向的值,编译器会阻止任何试图修改该值的操作,从而保障了类型安全。
  3. 引用作为参数时使用const和不使用const的区别及对类型安全的影响
    • 不使用const
      void modifyReferenceValue(int& ref) {
          ref = 20;
      }
      int main() {
          int num = 15;
          int& ref = num;
          modifyReferenceValue(ref);
          // num的值被修改为20
          return 0;
      }
      
      • 函数modifyReferenceValue可以直接修改引用所绑定的变量的值。如果调用者不希望该变量被修改,就可能出现意外修改,影响类型安全。
    • 使用const
      void readReferenceValue(const int& ref) {
          // ref = 20; // 这行代码会导致编译错误,因为ref是const引用
          int value = ref;
      }
      int main() {
          int num = 15;
          const int& ref = num;
          readReferenceValue(ref);
          // num的值不会被函数内部修改,保障了类型安全
          return 0;
      }
      
      • 当使用const int&作为参数时,函数内部不能修改引用所绑定的变量的值,编译器会进行严格检查,保障了类型安全。