C++中自己理解的一些细节哈
对于大牛来说,我写的可能很低级哈,留给自己看,以后遇到的都慢慢补充哈!^^
1.每一个类定义结束后,不要忘了在类的结束符"}"后面加上一个";"哦!
2.构造函数和析构函数肯定是不能只申明而不定义的,因为这个两个函数无论如何都会被调用。其他成员函数倒是可以只申明而不定义---只要你不调用它!
3.一个类会隐含的提供构造函数、构造函数、复制构造函数、赋值函数、析构函数!
4.一个空类或结构体,但用sizeof去测它的大小时并不为空,而是为1!这是编辑器给它加的,试想如果不加一个字节那么A a[3];(A是一个空类),那a[0],a[1],a[2]岂不是都是同一个地址?可见0不仅在数学上要特殊考虑,在计算机中也要特殊考虑哦!
5.如果你不在一个类成员前面加上public、private、protected的访问控制的描述,class里面默认是private,而struct里面是public哦!
6.有non-virtual member function(无论是non-static还是static)的class不会改变class的大小哦,但是有virtual member function的class会增加一个指针字节的大小,这是因为有virtual member function的class要维持一个指向vtbl(virual table)表的指针,这与C++对象模型有关!
7.类的non-static会使类增加相应的大小,而static则不。理由同6哦!
8.6,7也许让你困惑,现在就来说说需要多少内存才能表现一个class object呢?一般而言有:
a.其中nonstatic data members的总和大小。
b.加上任何由于alignment的需求而填补上去的空间(可能存在于members之间,也可能存在于集合体边界---可以理解为边界补齐吧)。
c.加上为了支持virtual而由内部产生的额外负担。
9.无论是public还是private的静态成员变量只能在class里面定义,然后在类外面完成初始化(以上已在VC环境中,有的编译器可以在类中声明的时候就可以初始化了)。
10.C++以下列方式支持多态
a.经由一组隐含的转化操作,例如把一个derived class指针转化为一个指向其public base type的指针:shape *ps = new circle().
b.经由 virtual function 机制:ps->rotate();
c.经由dynamic_cast和typeid运算符:if( circle *pc = dynamic_cast< circle *>( ps )) ...
11. 析构函数最好不要声明为纯虚函数。
12. 静态成员函数不能被const virtual volatile关键字描述。静态成员函数不能对直接存取其 class 中的 非静态成员变量!
13.一个指针,无论它指向什么类型,指针本身的大小都是固定的,一般是一个机器字!“指向不同类型之间的各个指针”间的差异,既不表现在其指针表示方法不同,也不在其内容(都是代表一个地址)不同,而是其所在寻址出来的 object 类型不同。也就是"指针类型"会教导编译器如何解释某个特定地址中的内存内容及其大小!
C++中自己理解的一些细节哈的更多相关文章
- webRTC中语音降噪模块ANS细节详解(二)
上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理.本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节. ANS的基本处 ...
- session与cookie的区别以及HTML5中WebStorage理解
一.session与cookie的区别 二.HTML5中WebStorage理解 WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回 ...
- 关于java中Stream理解
关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...
- OpenGL中的需要注意的细节问题
OpenGL中的需要注意的细节问题 1. 虽然我们使用Windows的BMP文件作为纹理时,一般是蓝色的像素在最前,其真实的格式为GL_BGR而不是GL_RGB,在数据的顺序上有所 不同,但因为同样是 ...
- go---weichart个人对Golang中并发理解
个人觉得goroutine是Go并行设计的核心,goroutine是协程,但比线程占用更少.golang对并发的处理采用了协程的技术.golang的goroutine就是协程的实现. 十几个gorou ...
- ios--->OC中Protocol理解及在代理模式中的使用
OC中Protocol理解及在代理模式中的使用 Protocol基本概念 Protocol翻译过来, 叫做"协议",其作用就是用来声明一些方法: Protocol(协议)的作用 定 ...
- java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换
java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换 一.字符串与其他类型连接 public class DemoString{ public static void mai ...
- webRTC中语音降噪模块ANS细节详解(三)
上篇(webRTC中语音降噪模块ANS细节详解(二))讲了ANS的处理流程和语音在时域和频域的相互转换.本篇开始讲语音降噪的核心部分,首先讲噪声的初始估计以及基于估计出来的噪声算先验信噪比和后验信噪比 ...
- webRTC中语音降噪模块ANS细节详解(四)
上篇(webRTC中语音降噪模块ANS细节详解(三))讲了噪声的初始估计方法以及怎么算先验SNR和后验SNR. 本篇开始讲基于带噪语音和特征的语音和噪声的概率计算方法和噪声估计更新以及基于维纳滤波的降 ...
随机推荐
- Java Calendar实现控制台日历
public static void main(String[] args) throws IOException { //初始化日历对象 Calendar calendar = Calendar.g ...
- SSL 错误
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at com.sun.net.ssl.in ...
- ios--绘图介绍
iOS–绘图介绍 绘制图像的三种方式 一. 子类化UIView,在drawRect:方法画图 执行方法时,系统会自行创建画布(CGContext),并且讲画布推到堆栈的栈顶位置 执行完毕后,系统会执行 ...
- mysql默认用户名和密码
默认用户名:root 密码:gree..
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
1. 基础知识: Android(java)学习笔记61:多线程程序的引入 ~ Android(java)学习笔记76:多线程-定时器概述和使用
- asp.net手动填充TreeView生成树
最近在做项目发现需要用到树的地方,页面的前台任然是使用一个asp.net的控件TreeView来显示树的结构,当然也可以自己在前台写一个树来展示,这在后期跟局功能的不同很大可能会要用到异步的知识,废话 ...
- cookie防篡改
概述: 除了 session 外,一般不会在客户端的 cookies 里保存过于重要的凭据,但电商应用有时候不可避免地存储了一些敏感数据到客户端,当然不希望被篡改. 目的: 让服务器端能识别cooki ...
- 本地tomcat访问mysql数据库
虽然以前经常听人说起过tomcat,但是今天头一次使用tomcat. 1.Tomcat的安装过程: 首先应该从Apache官方网站上下载是用于Windows的.zip压缩包. 下面是相应的下载链接: ...
- OC - 19.GCD
简介 GCD(Grand Center Dispatch)是Apple为多核的并行运算提出的解决方案,纯C语言 更加适配多核处理器,且自动管理线程的生命周期,使用起来较为方便 GCD通过任务和队列实现 ...
- Unity Manual 用户手册
unity3d 文档的中文网址: http://game.ceeger.com/Manual/