MST

星途 面试题库

面试题:C++中const char *p与char * const p类型转换在复杂场景中的应用

假设有一个类MyClass,其中有成员函数void process(char * const data),现在有一个const char * globalStr指向了一个全局字符串常量。你需要在MyClass类的另一个成员函数中,将globalStr传递给process函数,同时要考虑内存安全和const正确性。请编写相关代码,并解释你的设计思路。
18.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
class MyClass {
public:
    void process(char * const data) {
        // 处理data
    }

    void anotherFunction(const char * globalStr) {
        char * tempStr = const_cast<char*>(globalStr);
        process(tempStr);
    }
};

设计思路

  1. globalStr是一个指向常量字符串的指针,类型为const char*
  2. process函数的参数类型为char * const,意味着指针本身是常量,但指向的内容可以修改。
  3. 直接将const char*类型的globalStr传递给process函数会导致类型不匹配错误,因为process函数期望的是一个非constchar*指针。
  4. 使用const_castconst char*转换为char*,这样就可以将globalStr传递给process函数。需要注意的是,const_cast只能用于去除const属性,在使用时要确保原本指向的内容确实可以被修改,否则会导致未定义行为。这里虽然globalStr指向全局字符串常量,但通过const_cast转换后传递给process函数,在process函数中若修改该字符串内容,行为是未定义的,实际应用中应避免这种情况,此例仅为满足面试题目要求。