const成员函数作用
1. 不能修改类的成员变量,同时不能调用类的非const成员函数。
(const成员函数中,this的类型是一个指向const类类型对象的const指针,const成员函数返回*this作为一个const引用)。
2. 提供了基于const的重载。const对象只能使用const成员函数。非const对象可以使用任一成员,但非const版本是一个更好的匹配。

const形参:仅当函数形参是引用或指针时,可基于形参是指向const对象还是指向非const对象,实现函数重载。如果传递了const对象,则只有带const形参的版本才是调用的可行函数。如果传递的是非const对象,则两者均可,但非const形参是精确匹配。
如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,复制形参时并不考虑形参是否为const——函数操纵的是副本,无法修改实参。该输入参数也就无需保护,所以不要加const 修饰。例如不要将函数void foo(int x) 写成void foo(const int x)。

const数据成员:const数据成员或引用类型的成员,以及没有默认构造函数的类类型成员,都必须在构造函数初始化列表中进行初始化。在构造函数体内进行的是对数据成员的赋值。

可变数据成员:有时(但不是很经常),我们希望类的数据成员(甚至在const成员函数内)可以修改。这可以通过将它们声明为mutable来实现。可变数据成员不能为const,甚至当它是const对象的成员时也如此。因此,const成员函数可以改变mutable成员。

static类成员的优点
1. static成员的名字是在类的作用域中,可以避免与其它类的成员或全局对象名字冲突。
2. 可以实施封装,static函数可以是类的私有成员,全局函数则不可以。
3. static函数与特定类关联,不属于对象。静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,对静态数据成员的值更新,所有对象存取更新后的相同的值。

static成员函数
1. static成员函数没有this指针,通过使用非static成员显示或隐式地引用this是一个编译时错误。
2. static成员函数不是任何对象的组成部分,因而static成员函数不能声明为const。因为将成员函数声明为const就是承诺不会修改该函数所属的对象。
3. static成员函数也不能声明为虚函数。多态实现的基本原理是每个带有virtual函数的类的[实例]要包含一个指针,指向虚函数表(vtbl)。static函数作为类函数,不与任何[实例]相关,自然无法实现多态了。

static数据成员
1. static数据成员必须在类定义体的外部定义(正好一次)。不像普通数据成员, static成员不是通过类构造函数进行初始化,而是在定义时进行初始化。
2. static数据成员的类型可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用。

const与static类成员的更多相关文章

  1. static 类成员变量 和 static const类成员变量

    1.使用static类的优点: (1)避免与其他类的成员或者全局变量冲突 (2)可以封装 (3)阅读性好 2.static 数据成员独立于该类的任意对象而存在 static数据成员的类型可以是该成员所 ...

  2. C++中static类成员

    static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在 ...

  3. static类成员(变量和函数)

    0. 使用背景 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向 ...

  4. 12.3——类作用域,构造函数,友元,static类成员

    类作用域: (1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符 来引用其他的成员. (2)函数的返回值不一定需要在类的作用域中,但是若是返回 ...

  5. C++ static类成员,static类成员函数

    转载:ZJE_ANDY static修饰类中成员,表示类的共享数据 1.static类成员 C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处 ...

  6. C++之static类成员,static类成员函数

    0.static修饰类中成员,表示类的共享数据 1.static类成员 在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在.static类 ...

  7. .static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。

    static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量. 1)内存中的位置:静态存储区 2)初始化:局部的静态变量只能被初始化一次, ...

  8. 【转】C++的const类成员函数

    我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如, const char blank=' '; blank='\n'; //错误 面向对象程序设计中 ...

  9. [UE4]C++的const类成员函数

    我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如: const char blank = ‘’; blank = ‘\n’; // 错误 要声明一个 ...

随机推荐

  1. java多线程之内存的可见性介绍(备用1)

    (仅供参考) a.共享变量的可见能够一定程度保证线程安全,共享变量不可见导致数据不够准确,出现各种各样的问题,导致线程不安全. b.不同线程之间无法直接访问其他线程工作内存中的变量. 1.可见性 2. ...

  2. zabbix3.0_网络发现问题

    问题1. Zabbix网络发现system.uanem找不到主机,打开zabbix_server.conf文件的debug DebugLevel=5 # 错误信息如下 # item [system.u ...

  3. MySQL(四)DQL语言——条件查询

    摘要:条件查询:条件表达式,逻辑表达式,模糊查询,like,通配符,转义字符,escape关键字,between and,in,is null,is not null,安全等于. 条件查询语法: SE ...

  4. vue组件---插槽

    (1)插槽内容 Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 <slot> 元素作为承载分发内容的出口. 在父级组件里可以 ...

  5. Gitlab forbidden

    搭建使用了两年的gitlab 抽风了居然forbidden # vim /etc/gitlab/gitlab.rb gitlab_rails['rack_attack_git_basic_auth'] ...

  6. wpf 自定义Button按钮

    创建ButtonEx类 public class ButtonEx : Button { static ButtonEx() { DefaultStyleKeyProperty.OverrideMet ...

  7. 我的MYSQL学习心得链接

    http://www.cnblogs.com/lyhabc/p/3793524.html

  8. linux基础常用语句--新手

    查询:ls查看全部内容:ls -n删除:rm -rf 文件名创建目录: mkdir解压:rpm -验证是否安装:rpm -p 文件名rpm -ivh --nodeps 不需要前置条件的安装查询当前路径 ...

  9. sublime3注册码

    TwitterInc User License EA7E 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 ...

  10. Leetcode 133.克隆图

    克隆图 克隆一张无向图,图中的每个节点包含一个 label (标签)和一个 neighbors (邻接点)列表 . OJ的无向图序列化: 节点被唯一标记. 我们用 # 作为每个节点的分隔符,用 , 作 ...