
c/c++底层知识库
探讨c/c++底层知识,了解计算机底层结构
This is bill
这个作者很懒,什么都没留下…
展开
-
C++高级进阶 第三季:求余运算符+运算符结合律
一、求余运算符%用于求余数,优先级与*和/相同,结合律也是从左至右。要求两个操作数均为整数(或可以隐式转换成整数的类型),故:14.2%3就是错误的,因为double不能隐士转换为整形。#include <iostream>using namespace std;int main() { char c=253; int i=5; cout<<c%2<<endl;原创 2016-03-05 16:05:41 · 2064 阅读 · 0 评论 -
C++高级进阶 第四季:const详解(二) 常量折叠
一、文章来由const详解之二二、const 代替 #defineconst最初动机就是代替 #define。const 优于 #define: (1) #define没有类型检查,const在编译期(而不是预编译期)做类型检查;(2)const方便调试和定位bug。所以应该完全用const代替#define三、头文件中的const (1)要使用const代替#define,同样需要把cons原创 2016-03-23 00:03:05 · 2693 阅读 · 1 评论 -
C++之:友元类
一、文章来由上一篇写了友元函数,这一次写一个姊妹篇,继续深入探究一下友元类。二、定义 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下: friend class 类名; 其中:friend和class是关键字,类名必须是程序中的一个已原创 2016-03-11 09:43:39 · 4050 阅读 · 0 评论 -
C++之:友元函数
一、定义 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。二、友元函数语法形式: friend 类型名 友元函数名(形参表);然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但友元函数可以通过对象作为参数直接访问对象原创 2016-03-10 21:28:35 · 3402 阅读 · 0 评论 -
C++内存分区以及堆内存和栈内存
一、文章来由做项目用了很多堆内存指针,我一直苦苦思考的问题就是这些堆内存是否可以完全由栈空间分配的方式解决,这个问题纠结了好久,于是下决心解决它。二、程序内存分配栈区(stack)— 由编译器自动分配释放存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;在函数完成执行,系统自行释放栈区内存,不需要用户管理。整个程序的栈区的大小可以在编译器中由用户自行设定,VS中默认的栈区大小为1M,原创 2016-03-08 16:43:32 · 1839 阅读 · 0 评论 -
C++关键字之:explicit
一、文章来由c++基础知识繁多,对于不太常用,易用错的关键字需要总结一下。二、explicit关键字作用 (1)explicit关键字只是用来修饰构造函数的,而且它只会出现在类中的构造函数声明之前(定义之前再出现就错了)。 (2)explicit关键字是用来抑制由构造函数定义的隐式转换的。三、构造函数定义的隐式转换如下代码:class MyClass{public: MyCl原创 2016-03-07 18:46:06 · 1857 阅读 · 0 评论 -
C++高级进阶 第二季:mutable 关键字
零、文章来由打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。一、作用 mutable 用来解决常函数中不能修改对象的数据成员的问题。如果在一些情况下,希望在常函数中仍然可以修改某个成员变量的值,就在该变量前加上mutable。能在保证常量对象大部分数据成员仍然“只读”情况下,实现对个别成员的修改。#include <io原创 2016-03-05 10:16:44 · 1603 阅读 · 0 评论 -
C++高级进阶 第一季:const 详解
零、文章来由打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。一、从 文字常量和常变量 开始补充:const并没有想象中的那么简单,详见新博文《C++底层知识 第三季:const详解(二)》1、文字常量程序中的特殊标识符或表达式,由于同时满足: (1)不可寻址(放在代码区) (2)值不可变 所以可视为文字常量。他们是 静态原创 2016-03-05 10:11:19 · 2620 阅读 · 0 评论 -
《C++高级进阶》读书笔记 第一章 C++基础知识
1.2 文字常量和常变量1、文字常量 p3程序中的特殊标识符或表达式,由于同时满足: (1)不可寻址(放在代码区) (2)值不可变 所以可视为文字常量。他们是 静态数组名、枚举变量、全局(静态变量)首地址、#define定义的常量。整型文字常量: (1)前加0表示 八进制 (2)前加0x表示 十六进制 (3)后加L(推荐)或l,表示long类型 (4)后加U(或u)表示无符号数eg.1原创 2016-03-03 10:12:23 · 2891 阅读 · 0 评论 -
关于c++显示调用析构函数的陷阱
现在在写一个项目,需要用到多叉树存储结构,但是在某个时候,我需要销毁这棵树,这意味着如果我新建了一个树对象,我很可能在某处希望将这个对象的声明周期终结,自然会想到显示调用析构函数,但是就扯出来这么大个陷阱。原创 2015-09-07 19:27:26 · 7218 阅读 · 5 评论 -
depends.exe 使用说明
希望将Qt项目用在其他机器,用到 depends.exe,但不是太了解 depends.exe 各个窗口的意义,之后我会写一篇文章专门探讨 dll 和 lib 也会用到 depends.exe,但在这里简单说明用法。原创 2015-07-31 10:19:32 · 15161 阅读 · 0 评论 -
关于C++中公有继承、私有继承、保护继承的讨论
简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题。原创 2015-07-29 20:55:44 · 2955 阅读 · 3 评论 -
关于Java与c++隐藏、重写不同实现机制的探讨
本人现在用c++更多,但是以前Java也写过不少,Java和c++很像,但是深入挖一些,Java跟c++的区别很大,就拿刚刚发的另一篇博文虚函数与多态小览来说,里面就感觉有很多不同了,至少“重写”在这两个语言里面的理解就不同了~~跟基友一番讨论,决定把这个问题彻底捋一捋,因为这个是探讨,所以有不同想法欢迎提出和评论。原创 2015-07-25 20:24:37 · 1961 阅读 · 0 评论 -
虚函数与多态小览
Bill又写文章来由了哇~~早就想好好搞清这个问题了,这是c++领域里面比较难搞定的一块知识点,而且最近在看设计模式,里面有涉及这块,之前学过的不用容易玩忘记,于是就干脆研究透一点,也好碰到、用到的时候不心慌~于是有了这篇文章。原创 2015-07-25 17:16:46 · 2081 阅读 · 0 评论 -
sizeof小览
一道面试题迁出的探究我发现我已经形成一种习惯写来由了,以后看博客的时候可以让我回忆起为什么出现这个问题,我用什么方法解决的,既然形成习惯就让这个习惯保持下去吧。今天实验室师姐在看书,一处不解,是关于sizeof的,大家讨论此问题后,我一向信服做了才知道答案,于是有了这篇文章。但是只能叫小览,因为不可能总结完sizeof的用法,欢迎补充和讨论。原创 2015-07-23 00:01:38 · 4385 阅读 · 17 评论 -
从fork面试题开始的思考
还是依照惯例来说一下文章为什么来的。晚上好基友在网上刷面试题,看到一个有趣的题目,于是开始了研究,就有了这篇文章。原创 2015-07-18 00:42:01 · 1683 阅读 · 0 评论 -
sizeof(void*)
在vs中,Win32 和 X64 的结果不同: (1)Win32 平台结果是4 (2)X64平台结果是8只要是指针,不只是void*,包括char* 或 int*,结果都是一样。 原因就是指针存放的是内存地址,所以Win32 索引32位地址(4字节),X64索引64位地址(8字节) 最后给一段干坏事的代码,很简单,但是跟上面说的贴切,用 Win32 指令编译是只能吃掉4G,但是用 X64 就原创 2015-07-17 12:23:45 · 6891 阅读 · 0 评论 -
补码与模
本篇来由昨天进行了反码、补码那些和浮点数的研究,但是还有一些问题遗漏,晚上跟寝室众基友讨论了,反而提出来一个很有意思的问题,于是有了本篇~~我们并不知道为什么有补码这个东西,只知道在计算机中广泛用补码存储,不知道为什么叫“补”码。原创 2015-07-14 08:17:35 · 16989 阅读 · 8 评论 -
浮点数原理探究
今天听到实验室有人问道浮点数的实现机制,之前刚好研究过原码、反码、补码、移码的关系,而这类问题很底层,一般容易忽视。干脆打破沙锅问到底,彻底搞清楚这个问题并留下证据,于是就有了这篇博文。原创 2015-07-13 17:41:30 · 3621 阅读 · 0 评论 -
如何理解int *(*a[5])(int, char*);
int *(*a[5])(int, char*); 拆开来分析:typedef int* (*f)(int,char*);f a[5];所以a是个5个元素的数组,每个元素为函数指针.可用代码验证:#include #include int* (*a[5])(int,char*);int *foo(int n, char *s){ int *p;原创 2015-07-03 14:44:23 · 4035 阅读 · 0 评论