• const和指针


     一、如果被指物是常量,有些程序员会将关键字const写在类型之前,有些人会把它写在类型之后、星号之前。两种写法的意义相同,所以下列两个函数接受的参数类型是一样的:

    1 void fl(const Widget* pw);//fl获得一个指针,指向一个常量的(不变的)Widget对象.
    2 void f2(Widget const*pw);//f2也是
     1 #include <iostream>
     2 int main()
     3 {
     4     using std::cout;
     5     char greet[] = "hello";
     6     char pt[] = "你好";
     7     char *const p = greet;//const 在星号右边,表示指针自身是常量
     8     char const *q = greet;//const 在星号左边,表示被指物是常量,下同
     9     const char  *k = greet;//const 在星号左边,表示被指物是常量
    10     p = pt;//非法的
    11     q = pt;//合法的
    12     k = pt;//合法的
    13 }
    14  

     二、STL迭代器系以指针为根据塑模出来,所以迭代器的作用就像个T*指针。声明迭代器为const就像声明指针为const一样(即声明一个T* const指针),表示这个迭代器不得指向不同的东西,但它所指的东西的值是可以改动的。如果你希望迭代器所指的东西不可被改动(即希望STL模拟一个const T*指针),你需要的是const_iterator:

    1 vector<int> vec;
    2 ...
    3 const vector<int>::vec.begin();                   //liter的作用像个T* const
    4 *iter=10;                                        //没问题,改变iter所指物
    5 ++iter;                                          //错误!iter是const
    6 vector<int>::const_iterator cIter=vec.begin();//cIter的作用像个const T*
    7 *cIter=10;                                   //错误!*cIter是const
    8 ++cIter;                                      //没问题,可以改变cIter

    三、const最具威力的用法是面对函数声明时的应用。在一个函数声明式内,const可以和函数返回值、各参数、函数自身(如果是成员函数)产生关联。将const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这一类成员函数之所以重要,基于两个理由。第一,它们使class接口比较容易被理解。这是因为,得知哪个函数可以改动对象内容而哪个函数不行,很是重要。第二,它们使“操作const对象”成为可能,这对编写高效代码是个关键。

  • 相关阅读:
    php中防盗链使用.htaccess
    使用Apache的.htaccess就可以防盗链
    左连接和右链接的区别?
    大量查询SQL语句 实例
    java项目打包
    java小项目
    哈夫曼树
    广义表
    树和森林的遍历
    根据前序中序,中序后序建立二叉树
  • 原文地址:https://www.cnblogs.com/hsy1941/p/11840615.html
Copyright © 2020-2023  润新知