1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化。

2.static const的成员变量必须在类中定义的时候就初始化,不能在类外再定义,不能使用类初始化成员列表初始化。

3.static 与 virtual不能共存于一个函数上,即没有静态虚函数,原因在于静态函数没有this指针,无法通过对象实例来调用,而虚函数与普通成员函数一样必须通过this指针来调用。但是static成员可以通过类实例或类来调用,即A a; a.b或A::b都可。

4.非static的const成员,和引用类型的成员,因为在定义的时候就必须初始化,所以必须使用类初始化成员列表来初始化。

5.在一个函数的最后加上const,则这个函数只能是一个成员函数,而且是非静态的。因为const的函数就隐含着“this指针所指的对象不能被修改”这个意思。同时,const函数不能对任何成员函数做赋值等修改的动作,而且如果一个实例是const实例,这个实例只能调用const函数。

6.static成员在编译的时候就已经确定了(未显式初始化的则为0)。而普通成员则在创建实例的时候初始化。

故一个类对象里面的成员的初始化顺序:

程序加载时确定:

a.静态成员变量的空间及值。

b.成员函数的空间及地址。

创建对象时(运行时)确定:

c.虚函数表(如果该类或该类的任一个基类,超类有虚函数)

e.普通成员变量的空间及值

#include<iostream>
using namespace std; class A
{
public:
int a;
static int b;
const int c;
static const int d = ;
public:
A(int i,int j):c(i),a(j){}
void print(){}
}; int A::b;//这个值默认为0,因为static成员放在全局静态区。 int main()
{
A a(,);
cout<<a.a<<endl;
cout<<a.b<<endl;
cout<<a.c<<endl;
cout<<a.d<<endl;
}

参考链接:http://www.cnblogs.com/ylan2009/p/4320632.html

C++ 的static 与 const的更多相关文章

  1. [转载]能不能同时用static和const修饰类的成员函数?

    题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和con ...

  2. c++类的 static 和const那些事

    1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化. 2.static const的成员变量 ...

  3. iOS—— static和const联合使用;使用static const 与 #define

    static和const联合使用:   static将一个全局变量变成局部变量   const将一个局部变量变成局部常量 // 定义了一个局部常量      static const CGFloat ...

  4. (转) C++ static、const和static const 以及它们的初始化

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...

  5. 内存中的static、const实现形式

    最近在考虑下半年找工作的事情,看了不少面试题目,其中还是蛮有收获的,把基础好好复习了一遍.比如这个题目,static.const现形式,static和const类型的变量在写程序的时候也写了很多,不过 ...

  6. C++ static、const和static const 以及它们的初始化

    转自C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. s ...

  7. static和const

    转自说出static和const关键字尽可能多的作用 static关键字至少有下列n个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次 ...

  8. 【转】C++ 类中的static,const,及引用类型的初始化

    文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但 ...

  9. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  10. 使用static与const关键字时需要掌握的知识

    static:1.不考虑类,static的作用:    1)第一个作用:隐藏.使得全局变量和函数对其它文件不可见,同时避免了不同文件的命名冲突.    2)第二个作用:默认初始化为0.未初始化的全局静 ...

随机推荐

  1. Linux 之【辨析UPDATE/UPGRADE】和安装/卸载软件(apt-get)

    一.[辨析UPDATE/UPGRADE] UPDATE: update is used to download package information from all configured sour ...

  2. NOIP2018TG题解

    应该不会被禁赛吧qwq Day1 T1 铺设道路 €€£:我 抄 我 自 己 我考场上写的是一个类似于差分的做法,就是开个数组表示某个位置是否贡献答案,从小到大枚举高度,那么一个位置能贡献答案当且仅当 ...

  3. luogu P1072 $Hankson$ 的趣味题

    这里提供两种做法 sol 1 考虑两个数\(A,B\)和\(C=gcd(A,B),D=lcm(A,B)\)的关系 设\(S=\{2,3,5...P_n\}\)为质数集合\(p_{x,i}\)表示\(x ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 G题

    题目链接: https://nanti.jisuanke.com/t/31459 具体思路: 先顺序输入,然后回溯,假设已经加入了n个点,那么在加入的同时,首先看一下原先x轴上已经有过的点,找到第一个 ...

  5. oracle 行号和分页

    1.行号是个伪列,rownum 永远按照默认的顺序生成 2.rownum 只能使用< <= 不能使用>  >=(原因是oracle数据库是行式数据库,像盖楼一样,没有第一层就排 ...

  6. Python写黑客小工具,360免杀

    构思: client:反向连接server,执行shell命令 server:发送命令,控制客户端 import subprocess import socket import threading t ...

  7. ROS Kinetic Install on Debian 9

    Not Succesed! 1.  配置源$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release - ...

  8. Linux input子系统简介

    1.前言 本文主要对Linux下的input子系统进行介绍 2. 软件架构 图 input子系统结构图 input子系统主要包括三个部分:设备驱动层.核心层和事件层.我们可以分别理解为:具体的输入设备 ...

  9. 一篇不错的CUDA入门

    鉴于自己的毕设需要使用GPU CUDA这项技术,想找一本入门的教材,选择了Jason Sanders等所著的书<CUDA By Example an Introduction to Genera ...

  10. mq命令帮助文档

    https://www.ibm.com/support/knowledgecenter/zh/SSFKSJ_7.5.0/com.ibm.mq.ref.adm.doc/q083180_.htm