
★C/C++
zhengjihao
这个作者很懒,什么都没留下…
展开
-
C++ 类的sizeof大小
1空类class A {};大小为1。 类的实例化就是给每一个实例在内存中分配一块地址。空类被实例化时,会由编译器隐含的添加一个字节。所以空类的size为1。 2 虚函数class A{public:virtual void fun() {};virtual void fun2() {};};大小为4。 当C++类中有虚函数的时候,会有一个指向虚函数表(V-原创 2017-09-03 22:50:52 · 6363 阅读 · 2 评论 -
struct union数据对齐和sizeof大小
什么是数据对齐?简单的说就是数据的起始地址必须是对齐值的整数倍。 为什么要数据对齐?为了提高存取变量的效率。字节是内存空间分配的最小单位, 在程序中,我们定义的变量可以放在任何位置。其实不同架构 的CPU在访问特定类型变量时是有规律的,比如有的CPU访问int型变量时,会从偶数地址开始读取的,int类型占用4个字节(windows平台)。 0X0000,0X0004,0X0008…..这样只需要原创 2017-09-03 13:21:42 · 3337 阅读 · 1 评论 -
windows编程 IPC 管道
同步对象:管道(Pipe) 管道是一种用于在进程间共享数据的机制,其实质是一段共享内存。Windows系统为这段共享的内存设计采用数据流I/0的方式来访问。由一个进程读、另一个进程写,类似于一个管道两端,因此这种进程间的通信方式称作“管道”。 管道分为匿名管道和命名管道。1.匿名管道只能在父子进程间进行通信,不能在网络间通信,而且数据传输是单向的,只能一端写,另一端读。2.命令管道可原创 2017-09-02 10:01:58 · 454 阅读 · 0 评论 -
windows编程 IPC 文件映射(File Mapping)
文件映射(File Mapping)是进程间通信(IPC)的一种方式,本文主要讲解一下大致流程和函数。 Process A: 1 创建文件映射对象 HANDLE WINAPI CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD原创 2017-09-01 14:14:22 · 714 阅读 · 0 评论 -
函数参数求值顺序和默认值
函数参数求值顺序:当一个函数带有多个参数时,C++语言没有规定在函数调用时参数的求值顺序。编译器根据代码进行优化的需要规定对实参的求值顺序,可能是从左至右,也可能是从右至左。如果实参表达式中带有副作用的云算法,就有可能产生二义性。#includeint add_int(int x,int y){ return x + y;}void main(){ int x(4原创 2017-09-01 14:44:57 · 2129 阅读 · 0 评论 -
Windows编程 同步对象和技术
在多线程编程中,为了保证线程正确的运行,必须进行同步。Windows操作系统支持多种同步对象: 同步对象:互斥量(Mutex) 互斥量的一个重要特性是,只允许一个线程拥有它。 创建一个互斥量对象,可以使用CreateMutex函数HANDLE WINAPI CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL b原创 2017-09-01 13:49:38 · 280 阅读 · 0 评论 -
CreateWindow函数返回NULL
在学习Windows开发期间,遇到的问题。写了一个GUI项目,运行之后,没有反应。调试后发现,CreateWindow函数返回NULL。大概的代码如下:#include "main.h"#include#includechar szFilePath[MAX_PATH] = { 0 };char szResult[4096];CQueue queue;TCHAR* s原创 2017-08-31 21:25:07 · 1887 阅读 · 0 评论 -
对象作为参数和返回值 复制(拷贝)构造函数
先看一道搜狗的校园招聘题: 不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生#include <stdio.h>//1class B//2{//3};//4B func(const B& rhs){//5 return rhs;//6}//7int main(int argc,char **argv){//8 B b1,b2;//9 b2=func(b1);/原创 2017-09-08 10:17:47 · 2782 阅读 · 0 评论 -
搜狗笔试题
搜狗2016校园招聘 C++工程师笔试题 题目1: 现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?答案:安排自己先拿。 策略:自己先从13中取一个,这样两边都是12。 如果对方从一堆取硬币,则自己从另一堆中取相同数量的硬币。因为两堆个数一样,所以,最后一定会赢。题原创 2017-09-08 10:46:28 · 2119 阅读 · 0 评论 -
C++中的内存 堆 栈 全局变量 类
在C++中,内存分成了6个区,他们分别是堆、栈、自由存储区、全局/静态存储区 和 常量存储区, 程序代码区。 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量,函数参数等。堆:就是那些由new 分配的内存块,它们的释放编译器不管,由应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动收回。原创 2017-09-07 22:57:21 · 425 阅读 · 0 评论 -
框架模式和设计模式
很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上,他们是完全不同的概念。框架模式和设计模式这两个概念总容易混淆。其实它们之间是有区别的。框架通常是代码重用,而设计模式是设计重用。 在软件成产中有三种级别的重用: 内部重用:在同一应用中能公共使用的抽象块 代码重用:将通用模块组合成库或者工具集,以便在多个应用和领域都能使用 框架重用:为专用领域提供通用的或现成的基原创 2017-09-07 20:59:45 · 325 阅读 · 0 评论 -
static变量只初始化一次
输出下列代码的值#include<iostream>#include<stdio.h>int x = 4;void incre(){ static int x = 1; x *= x + 1; printf("%d\n",x);}void fun(){ printf("%d\n",x);}int main(){ for(int i = 1; i <原创 2017-08-29 20:47:17 · 10019 阅读 · 0 评论 -
栈是顺序存储的线性结构()
按照视点的不同,我们把数据结构分为逻辑结构和物理结构。逻辑结构:是指数据对象中数据元素之间的相互关系。逻辑结构分为以下四种:集合结构:集合结构中的数据元素除了同属于一个结合外,没有其他关系。 线性结构:线性结构中的数据元素之间是一对一的关系。 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。 图形结构:图形结构的数据元素是多对多的关系。存储结构:是指数据的逻辑结构在计算机中的存原创 2017-08-29 19:47:22 · 5799 阅读 · 0 评论 -
STL六大组件
STL提供六大组件,彼此可以组合套用。 1 容器(containers):各种数据结构。如vector,list,deque,set,map,用来存放数据。容器又可以分为顺序容器和关联容器. 顺序容器:vector, list, deque, stack, queue, heap, priority_queue, slist 关联容器:RB-tree, set, map, multimap,原创 2017-09-06 21:22:07 · 254 阅读 · 0 评论 -
C++ 同名隐藏和赋值兼容规则
封装,继承,多态是面向对象的三大特性。每一种特性,都有很多细节知识点。在这里,我们主要介绍一下继承中的同名隐藏和赋值兼容规则。同名隐藏:只要子类中的函数名与父类函数名相同,子类中的函数将会隐藏所有父类和子类同名的函数,只要名字相同就可以,不管参数列表。注意与函数重载的区别。#include<iostream>#include<stdio.h>#include<string>using names原创 2017-08-28 22:22:16 · 1034 阅读 · 0 评论 -
多继承的二义性和虚继承(虚基类)
一般来说,在派生类中对基类成员的访问是应该是唯一的。但是,由于在多继承的情况下,可能出现基类中某个成员的访问不唯一的情况,这称为对基类成员访问的二义性。在多继承的情况下,通常有两种可能出现的二义性。 1 派生类的多个基类中调用其同名成员时可能出现二义性class A{public: void f(){}};class B{public: void f() {} v原创 2017-09-04 16:22:29 · 2377 阅读 · 0 评论