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. 本篇开始讲基于带噪语音和特征的语音和噪声的概率计算方法和噪声估计更新以及基于维纳滤波的降 ...
随机推荐
- javascript-for-loop-example--reference
We hear a lot about loops, especially for loops. So what, in fact, are they? They’re just pieces of ...
- [转] webpack debug in webstorm
先run build,然后用node server.js来做 WebStorm 11 adds support for debugging client-side apps built with We ...
- Json字符串与字典互转
#pragma mark 转换json字符串 +(NSString *)toJSON:(id)aParam { NSData *jsonData=[NSJSONSerialization data ...
- PHP错误类型及屏蔽方法
1. 注意(Notices)这些都是比较小而且不严重的错误,比如去访问一个未被定义的变量.通常,这类的错误是不提示给用户的,但有时这些错误会影响到运行的结果. 2. 警告(Warnings)这就是稍微 ...
- Myeclipse快捷键的设置
- 如果 @s int 把它转成字符,可以这样 cast(@s as varchar)
如果 @s int 把它转成字符,可以这样 cast(@s as varchar)
- 利用DIV,实现简单的网页布局
<html lang="en"><head> <meta charset="UTF-8"> <title>GIS ...
- cocos2dx 各种环境的搭建
http://www.cocos.com/doc/tutorial/index?type=cocos2d-x Windows7上搭建Cocos2d-x 3.4开发环境 这里需要注意的是,如果是搭建VS ...
- 关于Android4.x系统默认显示方向各种修改
1.设置属性值 在device.mk文件中加入PRODUCT_PROPERTY_OVERRIDES += \ ro.sf.hwrotation=180 2.设置屏幕默认显示方向 在frameworks ...
- EF 更新数据出现 System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: 异常
EF6更新 数据出现 System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: Store update, insert, or ...