![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CPP手札
文章平均质量分 57
卓洛王子
卓洛王子又开始找工作了,求C++引擎或相关。
展开
-
C++ primer 第15章 简单文本查找器例子代码
诙谐的语言解析了:代理模式、友元类、智能指针的练手代码源码来自C++ primer ,经过本人风格小修改,实现文本读取以及输出、查找,查找结果支持与或非三种模式。第10章的代码样例也在里面。本例子实际上使用了代理模式,通过TextQuery、AndQuery、OrQuery、NotQuery实现了文本查询,由Query提供对外代理,重载了copyControl、赋值、输出操作符,是C++初级者深化的好练手demo。未实现词法分析,要求每个单词后面跟随空格(不是阅读C++ primer的目标)。工程环境:V原创 2014-09-07 21:05:46 · 728 阅读 · 0 评论 -
#include 的作用
include引入的文件拓展了当前命名空间的搜索范围。使用头文件的形式是将该cpp定义的变量或函数的命名整理在一个路径空间中这样子方便其他文件引用。当然cpp里面可以再定义变量或者函数,但是在不include cpp或c的情况下是无法访问的。同样,声明为static 的变量时被定义在以单个文件(h或cpp)为区域的匿名命名空间中,所以外界是无法访问这段被声明的区域。向外界提供访问本区域的stati原创 2014-11-10 15:48:40 · 2167 阅读 · 0 评论 -
近期语法使用小结
12、void *memset(void *s, int ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法原创 2014-09-26 22:58:35 · 577 阅读 · 0 评论 -
面试总结
1、今天情绪又失控了。找一份C++引擎的工作真难。2、一个空类的长度是多少?长度为1.。根本没有数据成员,哪来的长度,但是如果长度为0,怎么创建数组和内存区?编译器在创建空类的情况下会插入一个指针长度数据来标示这个类。多谢啦这位面试官这么经典的问题。测试环境:VS2012.原创 2014-11-14 00:23:08 · 1355 阅读 · 2 评论 -
LNK 2005 error 函数定义也是定义!!
百度知道网友的给力解释 那么就会产生LNK2005错误,一般错误错误信息类似:AAA.obj error LNK2005 int book c? book@@3HA already defined in BBB.obj基本上是围绕一个重复定义展开。然后这个错误可以派生出第四种错误细节,函数定义重复。在.h中实现函数定义,必须要把定义放在类的声明空间中,不能新打开定义空间去实现函数。因为原创 2014-10-29 01:23:35 · 967 阅读 · 0 评论 -
stl源码剖析:编译器的预定义位置集设置
目前我的工作环境还是win,所有演示也用VS或者cygwin这些环境作为基础。1、配置项目的附加include目,增加预定义位置集设置,编译器会把它加入include路径,比如在某个文件夹中定义一个vector(不带后缀),当我们项目中使用#include猜想1:如果预定义位置集中所增加的不同路径中有两个相同的文件,include采用的是有歧义形式的方式,即不附带完整路径,使用的是哪个文件原创 2014-11-16 01:30:38 · 1566 阅读 · 0 评论 -
this指针 operator* 解析
当我在侯捷先生的《STL源码剖析》中看到类似的代码时,我内心产生个疑惑:迭代器的->操作 会不会重复调用了解引用操作即operator*。先上代码:class testFunc{public:testFunc & operator*(){cout :" return *this;} testFunc* operator->(){return &(原创 2014-11-19 11:32:21 · 1638 阅读 · 0 评论 -
atomic 原子操作练习
atomic和thread是不分家的,C++11新标准 #include "stdafx.h"#include#include #include std::atomic a(10);std::atomic_llong total = {0};void funCount(int){ for (long long i = 0; i <= 10LL; i++) { tot原创 2014-11-19 12:28:22 · 1077 阅读 · 0 评论 -
多封装,少开放。强烈建议C++标准增加class之间的注入机制
近日在修改了一下下引擎代码(为了自己的组件),发现有些接口是只有特定类及其内部函数才去访问,却不使用友元声明的形式进行数据访问——当然使用了普通非virtual的形式也就是意味着不建议重载。故此:1、建议派生类(或允许)重载的声明为虚函数即virtual类型,2、强制派生类实现的声明为纯虚函数3、不希望派生类重载或覆盖的函数则为普通类,如果访问群体有限定范围或者范围比较少,可以考虑原创 2014-11-03 20:49:16 · 732 阅读 · 0 评论 -
多继承指针转化的问题
多继承的指针转化跟数据在内存的布局有极大的关系。目前,用msvc11和gcc4.8.3去测试指针转化之后的结果。发现只要不涉及编译增加虚表指针的情况下,派生类的地址多数是和继承列表的首个父类地址相同。当然会有其他问题影响到布局的指针转化。此次要提的内容是,别使用c_style指针转化。正确的指针转化来自于:dynamic_cast/static_cast。编译器内部生成的指针对象有某个反射机制原创 2014-11-26 20:51:51 · 1228 阅读 · 0 评论 -
gnu编译C++11,最好与win32公用代码
看makefile:#jingz's first file to test makeFileallTarget:stdafx_target 11_12_target g++ stdafx.o functor-adapter_p431.o -o functor-adapter_p431.exe#remove the object files rm -rf stdafx.o functor原创 2014-11-26 15:33:35 · 1171 阅读 · 0 评论 -
C++个人未解决笔记或未熟悉的使用
1、_Pragma()。因为能力有限,目前写的库都是逻辑库和遵循C++风格,较少使用宏定义的高级用法,待续。2、除0错误,不叫异常。原理:此异常非彼异常。除0在Linux下收到的是SIGFPE信号,而非C++的exception。收到SIGFPE,如楼上所说,进程直接被kill了。在C++中,除零 是错误,而非 异常在操作原创 2014-11-26 17:14:54 · 900 阅读 · 0 评论 -
using声明的使用
class A{public: A(); ~A(); int ai;private: int aj;};A::A(){ ai = 1,aj =2;}A::~A(){}class B:public A{public: B(); ~B(); using A::ai; void printf() { cout<<"------"<<ai; }原创 2014-10-22 01:32:24 · 715 阅读 · 0 评论 -
vs文件目录解析
首先,感谢前辈。我终于明白要有一颗感恩的心。开源主义是我信奉的一个正确信仰。怪不得出名的是MIT协议,虽然我没去阅读这个协议的细节。但是大家都知道它的存在,为什么是MIT。1、错误:$(ProjectDir)..\Resources\后改为正确$(ProjectDir)..\Resources\ 原因:$(ProjectDir)已经自带\啦,而且这个路径对应的是.vcxproj所在的目原创 2014-11-07 03:16:04 · 2141 阅读 · 0 评论 -
待续。makefile关于文件修改时间确定是否需要重新编译的正确书写格式
待续,未解决问题。#jingz's simple file to test makeFileCPP = g++OFLAG = -oC++11 = -std=c++11#定义变异规则,只编译固定后缀的文件.SUFFIXES : .obj .cpp .c .hpp.cpp.obj : $(CPP) $(CPPFLAGS) -c $<.c.obj : $(CPP) $(CPPFL原创 2014-12-04 15:58:57 · 2412 阅读 · 0 评论 -
虚继承的内存布局手札1——基于VS2012
1、纸上得来总觉浅,低头debug才深刻。对于《深度探索C++对象模型》这类型的书,得到的知识要去及时巩固才能实现永久记忆。2、在实现了了虚拟继承归并分支之后的内容布局跟虚表的可复用存在极大关系。继承的顺序决定了A和B的布局顺序,然后Common则在高地址,即公虚基类的布局放在D的尾部。情况1:class A:public virtual Common{...}原创 2014-12-04 22:40:09 · 645 阅读 · 0 评论 -
出来行,迟早是要还的(篇六):衣带渐宽终不悔
近期面试,遇到遇到了两件事: 1、终于有TR问我3D数学相关的了,指导点和面的向量表达方式,怎么求点在面的距离,其实只要代入点的坐标n*Point+d就能求得点到面的距离,但是我都忘记点面关系了。至少明确一点,我必须要在3D开发和3D数学相关深化,决不能回到2D写UI的层次,要不然此次离职才是真正地亏大:钱又无(上线奖金),人又无(多出的个人时间不用来进步,狗都不愿意吃)原创 2015-08-09 00:45:33 · 1218 阅读 · 0 评论 -
new delete 关键字深度解析
1、new调用了构造函数,delete调用了析构函数? 实际上这是一个错误的想法。2、new确实是对malloc进行了包装,看不到源码,我们只能猜测一下,C++标准库中规定的operator new 操作有没有调用构造函数?我也还不知道。唯一正确就是"operator new typename(parameter) "实际上是分解为三个步骤:看懂这句话就可以啦。operator new /*参数1:*/ typename ( /*"参数2 为:typename调用构造函数的参数,不是new 操作的“原创 2014-10-22 01:25:52 · 2114 阅读 · 0 评论 -
CCObject、CCCopy类的分析(前篇)
我没有研究过其他版本,至少在这个版本中可以看到01CCObject::CCObject(void)02:m_nLuaID(0)03, m_uReference(1) //when the object is created, the reference count of it is104,m_uAutoReleaseCount(0)05{06原创 2014-08-29 22:29:19 · 697 阅读 · 0 评论 -
Socket基础解析,基于win32模式
socket基础编程,实现网络会话,typedef的用法,win32_winNT宏对照表,基于win32数据长度分析原创 2014-09-24 15:11:37 · 1087 阅读 · 0 评论 -
C++ primer例子分析 C++11语法使用,模板编译问题解决,修正函数模板友元声明错误
TestQueue_16th_2.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream > & __cdecl operator该符号在函数 _wmain 中被引用首先一般按照平常的头文件和源文件分开处理使用包含形式编译,但是实际上我们包含的是头文件而不是源文件。注定是个错误。先解析一下包含编译和分离编译:包含模式:#in原创 2014-09-17 21:55:41 · 1115 阅读 · 0 评论 -
C++11模板句柄的实现:委派构造函数、default关键字分析
C++11,使用委派构造函数,并且快速初始化变量,default关键字重声明默认构造函数,回复pod状态。分析与推荐用法。目前为止,VS2012和2013对异常声明的兼容还是停留在代码沟通的级别,没有进行编译类型检查,出现如下错误可忽略。warning C4290: 忽略 C++ 异常规范,但指示函数不是 __declspec(nothrow)下为:VS2012不支持委托构原创 2014-09-20 02:11:10 · 1622 阅读 · 0 评论 -
C++ primer 第十六章 继承构造函数
我也遇到在cocos2dx中使用VS无法打印中文字符调试的问题,而C++标准一出,增加Unicode的标准,蛮好的。另一方面,由于继承的父类构造函数将导致新的风险,即增加了构造函数,可以显示的把某些构造函数 = deleted 掉。使用继承的构造函数还是无法完美的实现初始化,那改怎么办?原创 2014-09-21 23:11:04 · 579 阅读 · 0 评论 -
面试时候遇到的坑。
首先,本人知识不是很渊博。然后才会被坑。今天才发现遇到了一个坑,为什么autorelease我理解的和别人的不一样。根本就没有cocos2dx技术精解里面提到的m_bIsManagered这个变量。有些技术HR问你问题的时候记得确认版本。另外再次看了下3.2版本的CConject(Ref),发现Clonable竟然和Ref不是继承和派生的关系,也就说,如果需要写一些可复制的Node原创 2014-09-23 00:00:46 · 1607 阅读 · 0 评论 -
一周工作总结
1、当数据库的某个表的某个属性声明为:aotuinrement时,说明该数据是自动增长的,不用初始化了,外部调用插入或者修改的应该默认该值为NULL。2、数据库存储过程终于知道怎么写了。分享一下代码:DELIMITER //DROP PROCEDURE IF EXISTS deleteModel//CREATE PROCEDURE deleteModel(IN inMachineI原创 2014-08-29 22:28:16 · 511 阅读 · 0 评论 -
DB2关于视图的规定
1)若视图是由两个以上基本表导出的,则此视图不允许更新。2)若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行delete操作。3)若视图的字段来自聚集函数,则此视图不允许更新4)若视图定义中含有Group By子句,则此视图不允许更新5)若视图定义中含有DISTINGCT短语,则此视图不允许更新6)若视图定义中有嵌套查询,并且内层查询的原创 2014-08-29 22:28:19 · 3570 阅读 · 0 评论 -
为什么析构函数常常是虚函数
1、简介 编译器总是根据类型来调用类成员函数。但是一个派生类的指针可以安全地转化为一个基类的指针。这样删除一个基类的指针的时候,C++不管这个指针指向一个基类对象还是一个派生类的对象,调用的都是基类的析构函数而不是派生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄漏。 而将基类的析构函数声明为虚函数后,在上述情况发生时,通过调原创 2014-08-29 22:28:36 · 563 阅读 · 0 评论 -
gen下R文件消失 && 工程无故…
原文地址:&& 工程无故报错">gen下R文件消失 && 工程无故报错作者:梁博雅一、R文件失踪案1. 背景:前些时候,在进行Android程序开发过程中帮助同学修改xml代码时候,偶尔会出现R类文件离奇失踪事件,当时经过一些恢复操作无果后,只好重建一个工程。由于R类文件在Android工程中是一个极其特殊的存在,所以我就此进行了一些小测试。2. 失踪者资料:R类文件是由ADT自动生成转载 2014-08-29 22:28:45 · 572 阅读 · 0 评论 -
fopen 读取文件 C++ cocos2dx
unsigned char* CCFileUtils::getFileData(constchar* pszFileName, const char* pszMode,unsigned long *pSize){ unsigned char * pBuffer =NULL; CCAssert(pszFileName != NULL&& pSize != NULL &&原创 2014-08-29 22:28:57 · 756 阅读 · 0 评论 -
第二周工作总结
1、C/C++中,如果在数字面前以0开头,会被识别为八进制。新浪博客不适于写个人代码代码或者项目博文,故从今日起转到http://my.oschina.net/jingzhe/blog原创 2014-08-29 22:28:27 · 491 阅读 · 0 评论 -
Android SDK更新以及ADT更新…
不错,谢啦原文地址:SDK更新以及ADT更新出现问题的解决办法">Android SDK更新以及ADT更新出现问题的解决办法作者:五步蛇问题描述使用SDK Manager更新时出现问题Failed to fetch URLhttps://dl-ssl.google.com/android/repository/repository-6.xml,reason: Connection to转载 2014-08-29 22:28:42 · 455 阅读 · 0 评论 -
Android内存泄漏简介
抄袭原文:http://hubingforever.blog.163.com/blog/static/17104057920113297362974/前言 不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露。其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成了内存泄露。如果我们的jav原创 2014-08-29 22:28:55 · 418 阅读 · 0 评论 -
博文收藏——类型转化语句
1、c++变量与常量之间转换?答:int integer = 0; // 变量const int& cointeger = integer; //常量就可以做到了。对cointeger的一切操作都只是作用于对象integer,其实就是一种转换。2、static_cast和const_cast有什么作用C++通过引进四个新的类型转换操作符克服了C风格类型转换的缺点,这四个操作符是, st原创 2014-08-29 22:29:02 · 567 阅读 · 0 评论 -
虚析构函数举例 纯虚析构函数
虚析构函数举例编辑这里是一个例子:class awov { // awov = "abstract w/o// virtuals"public:virtual ~awov() = 0; // 声明一个纯虚析构函数};这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义:awov::~awov()原创 2014-08-29 22:29:04 · 574 阅读 · 0 评论 -
lua table 关联数组&nbs…
table的基础原理是关联数组,但是具体的实现怎么样?可是table同时支持下标和索引的访问模式,假如下标和索引是两块内存区域,就和C++的类一样,数组下标访问的形式是另一块内存,可以很简单地访问和增长;索引访问的是映射内存块。每次根据试用方式访问不同的内存卡即可。以上有错请告知以下面代码测试:a={}for i = 1,1000 do a[i] = i*2 endprint(原创 2014-08-29 22:29:06 · 1192 阅读 · 0 评论 -
数据段、代码段、栈区、堆区
汇编编译基础,C 必备知识原文地址:数据段、代码段、栈区、堆区作者:gyeve一个程序经过汇编之后生成:数据段、代码段、栈区、堆区。如下图显示: bss段:用来存放程序中未初始化全局变量的一块内存区域。bss:block start by symbol :静态内存分配数据段:用来存放程序中初始化的全局变量的一块内存区域。包括可变的数据段和不可变的数据段。const的全局变量存储于转载 2014-08-29 22:29:41 · 919 阅读 · 0 评论 -
睁开眼看大神们的C++11
睁开眼看C++标准委员会的大神们设计的C++11标准,分析极具争议的内容和使用方法。原创 2014-09-14 22:23:28 · 1042 阅读 · 0 评论 -
本人的开发环境备注
windows:1、C盘有个vs2012配置了freeglut2.8(有源码工程)、glew的开发环境。因为原码的生成路径有些混乱,比如我只改了debug的路径,所以目前工程放在c盘的用户文档vs2012下2、D盘有个vs2013。用于C++11、opengl超级宝典的开发环境配置(freeglut2.6、gltools使用源码编译)。原则上只要再把上面的freeglut的源码工程移入D:原创 2015-01-01 21:08:52 · 730 阅读 · 0 评论