- 博客(64)
- 收藏
- 关注
原创 libcmt.lib和msvcrt.lib冲突,原因和解决方法
libcmt.lib和msvcrt.lib冲突,原因和解决方法原因解决方法libcmt.lib是windows环境下vc提供的静态运行时库(多线程);msvcrt.lib是动态运行时库。原因由于DLL(或EXE)工程设置的Runtime Library 和 它导入的其他(.lib)库的Runtime Library不同。比如: 下面为Release版,其中Runtime Library和use of MFC 需要匹配(所以这两个内容的设置是两两对应的)类型我的DLL工程需要调用的lib
2021-02-26 13:51:34 1648
原创 C++STL中list, vector, map, set用法与区别
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector与listVector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要...
2020-11-02 10:03:18 1367
原创 03:尽可能使用const
1.const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量void f1(const int *ip);void f2(int const *p);//这两个函数接受的参数类型一样,都表示一个指向常量的指针2.令函数返回一个常量值class Rational{...};const Rational oper...
2020-11-02 10:02:23 557
原创 游戏引擎中应用到的小技巧
计算结构体成员内存偏移量#define STRUCT_OFFSET(struc,member)((int)&((struc*)NULL)->member)替换基类内存信息class A{public:int a;int b;}class B:public A{public:int c;}B b;b.a = 1;b.b = 2;A na;na.a = 3;na.b = 4;(A&)b=na;RTTI 动态类型识别枚举转换成字符串inline String Valu
2020-11-02 10:01:36 534
原创 35个改善编程与设计的有效方法
01:指针与引用的区别因为引用肯定会指向一个对象,在 C++里,引用应被初始化指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是 引用则总是指向在初始化时被指定的对象,以后不能改变。还有一种情况,就是当你重载某个操作符时,你应该使用引用。最普通的例子是操作符 []。这个操作符典型的用法是返回一个目标对象,其能被赋值。总的来说,在以下情况下你应该使用指针,一是你考...
2020-03-26 16:28:42 430
原创 改善C++11和C++14使用的42种具体方法(简版-下)
《Effective Modern C++》22:如果使用Pimpl惯用法,则要在实现文件中定义特殊成员函数Pimpl惯用法通过减少类的实现和类的客户端的编译依赖关系缩减了编译时间。如果std::unique_ptr用于pImpl指针,则在类的头文件中声明特殊成员函数,在实现文件中实现。即使默认的函数实现可以接收的话也可以这么做。以上建议适用于std::unique_ptr,但不适用...
2020-03-21 22:58:15 506
原创 C++模板与泛型编程(41-49条款)
41:了解隐式接口和编译器多态请记住42:了解typename的双重意义请记住43:学习处理模板化基类内的名称请记住44:将与参数无关的代码抽离templates请记住45:运用成员函数模板接收所有兼容类型请记住46:需要类型转换时请为模板定义非成员函数请记住47:请使用traits classes表现类型信息请记住48:认识template元编程请记住...
2020-03-15 14:34:29 364
原创 Linux(CentOS 7)使用gcc编译c,c++代码
安装gcc:1、使用 yum -list gcc* 查询 centos 官方gcc的所有包:可安装的软件包gcc.x86_64gcc-c++.x86_64gcc-gfortran.x86_64gcc-gnat.x86_64gcc-go.x86_64gcc-objc.x86_64gcc-objc++.x86_64gcc-plugin-devel.x86_642、根据需要安装包...
2020-03-15 14:27:14 3060
原创 C++资源管理(13-17条款)
13:以对象管理资源举个例子:class TeamSys{...}TeamSys* createTeamSys();//返回指向动态分配的对象TeamSys的指针,调用者有责任删除它。void f(){ TeamSys* ts = createTeamSys(); ... delete ts;}以上代码中…,可能会出现异常或者return ,会导致ts所指向的对象无法获得...
2020-03-15 08:46:20 274
原创 C/C++可变参数函数
一、变长参数函数头文件:#include <stdarg.h>函数声明int add(int count, ...);函数定义int add(int count, ...){ va_list va; va_start(va, count); int sum = 0; for (int i = 0; i < count; i++) sum += va_ar...
2020-03-12 17:19:56 959 1
原创 C++将变量名转换为字符串
如何将变量名转换为字符串,这就用到了define中的特殊标识符##是简单的连接符,#@用来给参数加单引号,#用来给参数加双引号即转成字符串。#define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #xint a=Conn(12,34);char b=ToChar(a);char c[]=ToStrin...
2020-03-12 14:04:07 10855 4
原创 C++中的关键字auto
百度百科维基百科C语言auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存auto double a=3.7;C++ 98标准/C++03标准同C语言的意思完全一样:auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存。C++ 11标准在C++11标准的语法中,auto被定义为自动推断变量的类型。例如:auto x=5.2;//...
2020-03-12 13:44:55 889
原创 55:让自己熟悉Boost
Boost是一个C++开发者集结的社群,也是一个可以自由下载的C++程序库群。它的网址是https://www.boost.org/Boost的两个原因使其他组织无法匹敌: (1)它与C++标准委员会之间有着独一无二的密切关系,并且对委员会深具影响力。Boost由委员会创设,因此Boost成员和委员会成员有很大的重叠。Boost有个目标:作为一个“可被加入标准C++之...
2020-03-12 12:46:15 355
原创 C++继承与面向对象设计(32-40条款)
32:确定你的public继承塑模出is a关系33:避免遮掩继承而来的名称34:区分接口继承和实现继承35:考虑virtual函数以外的其他选择36:绝不重新定义继承而来的非虚函数37:绝不重新定义继承而来的缺省参数值38:通过复合塑模出has a或”根据某物实现出“39:明智而审慎地使用private继承40:明智而审慎地使用多重继承...
2020-03-12 11:09:33 366
原创 C++设计与声明(18-25条款)
18:让接口容易被正确使用,不易被误用19:设计class犹如设计type20:宁以pass by reference to const 替换pass by value21:必须返回对象时,别妄想返回其reference22:将成员变量声明为private23:宁以non member、non friend替换member函数24:若所有函数都需类型转换,请为此采用non member...
2020-03-11 13:42:04 346
原创 非递归方式实现二叉树遍历
先序遍历void BinaryTree::PreOrder(BinTreeNode *current = root){ stack<BinTreeNode*> s; while (current||!s.empty()) { if (current) { cout << current->data << endl; s.pu...
2020-03-11 08:13:41 260
原创 Lua教程
Lua简介参考文章Lua1.x对于学术用途是免费的,但是商业用途则需要协商Lua2.xtable作为对象和类的基础,table索引,算术操作符,字符串拼接,顺序比较,函数调用, Lua作为无限制免费软件发布,Lua3.x我们解决了fallback冲突问题。我们将fallback替换为tag方法:钩子是以(event, tag)的形式挂在字典里的...
2020-03-10 17:11:40 6855
原创 C++实现(26-31条款)
26:尽可能延后变量定义式的出现时间std::string str;str = password;....//将password作为encrypted的初值,跳过毫无意义的default构造过程std::string str(password);...上述行为可以避免构造非必要对象,还可以避免无意义的default构造行为。尽可能延后变量定义式的出现。这样做可增加程序的清晰...
2020-03-10 11:27:53 874
原创 C++构造/析构/赋值运算(05-12条款)
05 :了解C++默默编写并调用哪些函数编译器可以暗自为class创建默认构造函数、拷贝构造函数(初始化调用)、拷贝赋值操作符(赋值调用)、析构函数·类名(){...类名(const 类名& rhs){...}~类名(){...}类名& operator=(const 类名& rhs){...}06:若不想使用编译器自动生产的函数,就该明确拒绝为了阻止编译器...
2020-03-09 18:28:37 275
原创 01:视C++为一个语言联邦
C区块、语句、预处理器、内置数据类型、数组、指针局限:没有模板,没有异常,没有重载…。Object-Oriented C++classes,封装,继承,多态,virtual函数(动态绑定)Template C++编程泛型(模板元编程)STLtemplate程序库容器、迭代器、算法以及函数对象例:对于内置语言类型而言pass by value通常 pass by referenc...
2020-03-09 16:32:15 252
原创 C++中字符串与数值转换(超详细)
文章目录一、使用stringstream(简单粗暴)1.stringstream2.istringstream和ostringstream二 使用函数1 字符串转成数值3.char数组转换成数值3.数值转换为字符串三 总结下面会介绍两种字符串和数值相互转换方法:stringstream和函数一、使用stringstream(简单粗暴)C++中有ostringstream、istringst...
2020-03-06 14:55:46 5961
原创 C#用于实现心跳机制的定时器Demo
1 定时器Timer的一些属性和方法:属性与方法说明start()将Enabled设置为true,开始引发事件Stop()将Enabled设置为false,停止引发事件Close()释放占用的资源AutoRest循环引发还是只引发一次Enabled提示Timer是否引发事件Intervel获取和设置引发事件的间隔时间,单位为毫秒...
2020-03-06 09:53:00 2087
原创 c++创建与调用dll
一、DLL动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。通过使用 DLL,程序可以实现模块化,由相对独立的组件组成,因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。动态链接与静态链接的不同之处在于:动态链接允许可执行模块(.dll 文件或 .exe 文件)仅包含在运行时定...
2020-03-05 12:02:16 659
转载 Lua与C++交互
一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图:lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的: &nb...
2020-03-05 08:25:12 693
原创 c++中内联函数那点事
1 内联(inline)函数 c++在编译时可以讲调用的函数代码嵌入到主调函数中,这种嵌入到主调函数中的函数称为内联函数,又称为内嵌函数或内置函数。定义内联函数时,在函数定义和函数原型声明时都使用inline,也可以只在其中一处使用,其效果一样。内联函数在编译时用内联函数函数的函数体替换,所以不发生函数调用,不需要保护现场,恢复现场,节省了开销...
2020-03-02 12:05:39 719
转载 关于使用异或运算来实现两个数交换的问题
简介今天在写代码时,需要写一个两个数交换的函数Swap(),于是想装个B,用位运算异或来实现,代码如下:void Swap(int &a, int &b){ a = a^b; b = a^b; a = a^b;}结果当传入的值是同一个变量时,出现了个尴尬的现象,就是值都变成了0。。。我们知道异或运算是当都是1或0时,返回0,一个是1一个是0时,...
2020-02-29 11:17:34 436
原创 构建工具Gradle之自动化测试
自动化测试 一些开源的测试框架比如JUnit,TestNG能够帮助你编写可复用的结构化的测试,为了运行这些测试,你要先编译它们,就像编译源代码一样。测试代码的作用仅仅用于测试的情况,不应该被发布到生产的环境中,需要把源代码和测试代码分开来。测试任务:compileJava->processResources->classess-&...
2020-02-29 11:12:22 322
原创 构建工具Gradle之多项目构建
项目模块化 在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常是最佳实践,这需要你清晰的划分功能的边界,比如把业务逻辑和数据持久化拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条非常好的软件开发实践。TODO模块依赖关系Model<–depends on—Repository<—depends on -----W...
2020-02-29 11:10:22 202
原创 构建工具Gradle之依赖管理
概述几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本,可以解决因传递性依赖带来的版本冲突。工件坐标:group、name、version常用仓库:mavenLocal mavenCentral(http://search.maven.org/) jcenter自定义maven仓库(私服)文件仓库依赖的传递性:B依赖A,如...
2020-02-29 11:09:16 248 1
原创 构建工具Gradle之构建生命周期
构建生命周期:初始化(Initialization phase)-> 配置(Configuration phase) eg:task loadVersion{project.version=‘1.0’}->执行(Execution phase) eg task loadVersion <<{print ‘success’}...
2020-02-29 11:06:05 273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人