面试题答案
一键面试- const在函数参数中保障类型安全的原理
- const修饰函数参数时,它告诉编译器该参数在函数内部不应被修改。这是一种编译期的检查机制,编译器会在编译阶段对代码进行检查,如果发现对const修饰的参数进行了修改操作,就会报错,从而保障类型安全,避免意外地修改传入的数据。
- 指针作为参数时使用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
的指针,函数内部不能修改指针所指向的值,编译器会阻止任何试图修改该值的操作,从而保障了类型安全。
- 这里
- 不使用const:
- 引用作为参数时使用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&
作为参数时,函数内部不能修改引用所绑定的变量的值,编译器会进行严格检查,保障了类型安全。
- 当使用
- 不使用const: