c++面试题每日一学记录-const关键字

const关键字的深层解析与易错点

1. 指针中的const陷阱

四种组合及易错点

int a = 10, b = 20;  

// 1. 常量指针(底层const):指向的值不可变  
const int* p1 = &a;  
// *p1 = 15;  // 错误!  
p1 = &b;     // 正确  

// 2. 指针常量(顶层const):指针本身不可变  
int* const p2 = &a;  
*p2 = 15;    // 正确  
// p2 = &b;  // 错误!  

// 3. 指向常量的指针常量  
const int* const p3 = &a;  
// *p3 = 20;  // 错误!  
// p3 = &b;   // 错误!  

// 4. 易混淆写法  
int const* p4 = &a;  // 等同于 const int* (常量指针)  

经典错误

const char* str = "hello";  
// str[0] = 'H';  // 运行时错误!试图修改常量区数据  

2. const成员函数的本质

底层原理

class Widget {
     
public:  
    void foo() const;   // 编译器转化为 void foo(const Widget* this);  
    void foo();         // 编译器转化为 void foo(Widget* this);  
};  

易错点1:返回内部指针/引用

class DataHolder 

你可能感兴趣的:(c++,开发语言)