C++ const总结

1. Bool Bar(const int x[], const int y[],int z[]);

解释:给x,y标上const后,编译器可知此函数循环,每个不同迭代内容不相关,可并行执行;

否则,由于指针z可能指向x/y,引起内存重叠,z[i]修改会改变x[]/y[]数据,循环的不同迭代间有数据依赖关系,不可用并行指令优化。

2. 类中将const成员函数声明为常量函数,表面它不会修改任何类成员的值;常用来做存取器;

class Rectangle
{
  public:
     int GetLength() const {return itsLength;}
  private:
     int itsLength;
}

3. 指针常量与常量指针:

int const *p1 = &b;             //const 在前,定义为常量指针
int *const p2 = &c;             //*在前,定义为指针常量 
常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。   

 p1 = &a是正确的,但 *p1 = a是错误的。
指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
 p2= &a是错误的,而*p2 = a 是正确的。

4. 若声明了一个指向常量对象的指针,那么此指针只能调用常量函数:

class Rectangle
{
public:
    Rectangle();
    ~Rectangle();
    void SetLength(int length) {itsLength = length;}
    int GetLength() const {return itsLength;}
    void SetWidth(int width){itsWidth = width;}
    int GetWidth() const{return itsWidth;}
private:
    int itsLength;
    int itsWidth;
}

Rectangle::Rectangle():itsWidth(5),itsLength(10) {}
Rectangle::~Rectangle() {}

int main()
{
    Rectangle *pRect = new Rectangle;
    const Rectangle *pConstRect = new Rectangle;   //pConstRect为指向常量对象Rectangle的指针
    Rectangle *const pConstPtr = new Rectangle;    //pConstPtr为指向Rectangle对象的常量指针
    
    std::cout << pRect->GetWidth()<<endl;
    std::cout << pConstRect->GetWidth()<<endl;
    std::cout << pConstPtr->GetWidth()<<endl;

    pRect->SetWidth(10);
    //pConstRect->SetWidth(10);
    pConstPtr->SetWidth(10);

    std::cout << pRect->GetWidth()<<endl;
    std::cout << pConstRect->GetWidth()<<endl;
    std::cout << pConstPtr->GetWidth()<<endl;
}

上述pConstRect被声明为指向常量Rectangle的指针,用其来调用非常量成员函数是非法的;

而pConstPtr被声明为指向Rectangle的常量指针,指针为常量不能指向其他对象,但指向的Rectangle不是常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值