zoukankan      html  css  js  c++  java
  • 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对象”成为可能,这对编写高效代码是个关键。

  • 相关阅读:
    Maven学习总结(八)——使用Maven构建多模块项目
    Maven学习总结(七)——eclipse中使用Maven创建Web项目
    Maven学习总结(六)——Maven与Eclipse整合
    Maven学习总结(五)——聚合与继承
    BBS的登陆——发帖——回帖
    bugfree,CDbConnection 无法开启数据库连线: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '192.168.0.99' (4)
    Mac 中配置Apache
    Mac里安装配置Jdk
    启动mongodb遇到的错:warning: 32-bit servers don't have journaling enabled by deflity
    分享组2015.7.31
  • 原文地址:https://www.cnblogs.com/hsy1941/p/11840615.html
Copyright © 2011-2022 走看看