C++
文章平均质量分 95
阳光下的
这个作者很懒,什么都没留下…
展开
-
Protobuf 的 proto3 与 proto2 的区别
这是一篇学习笔记。在粗略的看了 Protobuf 的文档中关于 proto2 和 proto3 的说明后,记录下了几点 proto3 区别于 proto2 的地方。总的来说,proto3 比 proto2 支持更多语言但 更简洁。去掉了一些复杂的语法和特性,更强调约定而弱化语法。如果是首次使用 Protobuf ,建议使用 proto3 。在第一行非空白非注释行,必须写:syntax = “...转载 2019-12-12 22:00:12 · 586 阅读 · 0 评论 -
【笨木头C++】基与基础10:又是函数之引用
http://www.be还记得之前说过,函数的参数用指针,可以避免拷贝产生额外的开销吗?这次要来介绍一个类似的参数,那就是引用参数。笨木头花心贡献,啥?花心?不呢,是用心~转载请注明,原文地址:http://www.benmutou.com/archives/1928文章来源:笨木头与游戏开发1.什么是引用?对于初学者来说,引用和取地址值操作可转载 2015-12-29 18:38:30 · 541 阅读 · 0 评论 -
宏定义中的特殊参数(#、##、...和__VA_ARGS__)+二叉查找树
最近在android的某个代码的头文件中发现很多__VA_ARGS__,google一下.还是比较有用.附带其它宏定义参数,一起记录之.1. ...和__VA_ARGS__看看msdn上给得例子吧[cpp] view plaincopyprint?#include #define EMPTY #define CHECK1(x, ...) i转载 2015-11-28 14:08:07 · 3714 阅读 · 0 评论 -
深刻剖析经典面试题之一:堆和栈的区别
堆(heap)和栈(stack)的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。原创 2015-03-10 11:02:10 · 883 阅读 · 0 评论 -
C++继承:公有,私有,保护
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有转载 2014-03-10 15:55:46 · 603 阅读 · 0 评论 -
inline函数和一般的函数有什么不同
比如 int g(int x) { return x + x; } int f() { return g(); } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者。 如果g是inline的话。f会被直接编译成。 int f() { return x + x; } 相当于把g执行的操作直接融合到f里。这样减少了调用g消耗的时间,但同时原创 2014-06-21 21:12:31 · 646 阅读 · 0 评论 -
结构体初始化
结构体初始化,对结构体struct a {int b;int c;}有几种初始化方式:struct a a1 = { .b = 1, .c = 2};或者struct a a1 = { b:1, c:2}或者struct a a1 = { 1, 2}; //必须顺序赋值内核喜欢用第一种,使用第原创 2014-05-06 09:37:42 · 677 阅读 · 0 评论 -
创建GitHub技术博客全攻略
1 区别git是一种版本控制系统。跟svn、cvs是同级的概念。github是一个网站,给用户提供git服务。这样你就不用自己部署git系统,直接用注册个账号,用他们提供的git服务就可以2 github 就一个代码托管网站 (任鹏飞)---------------------------说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼转载 2016-01-06 11:33:56 · 476 阅读 · 0 评论 -
C++ namespace + std::bind std::function
命名空间基础namespace 关键字使得我们可以通过创建作用范围来对全局命名空间进行分隔。本质上来讲,一个命名空间就定义了一个范围。定义命名空间的基本形式如下:namespace名称{//声明}在命名空间中定义的任何东西都局限于该命名空间内。下面就是一个命名空间的例子,其中对一个实现简单递减计数器的类进行了本地化。在该命名空间中定义了计数器类用来实现计数;其中的upper原创 2015-12-30 10:17:53 · 790 阅读 · 0 评论 -
对接SDK + java与C++互调
刚研究了java与C++的相互调用,赶紧记录下来。。。一、java调用C++要想让java调用C++,必须让C++函数按着命名规则来。命名规则为返回值 Java_包路径_类名_函数名(JNIEnv* env,jobject obj);对应如下:jint Java_com_ndk_testndk_TestHello_jnia(JNIEnv* env,jobject obj);转载 2015-10-26 14:12:09 · 7370 阅读 · 0 评论 -
STL中用ERASE()方法遍历删除元素
http://www.cppblog.com/Herbert/archive/2009/01/08/70479.html STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。 在使用 list、set 或 ma转载 2016-07-28 21:06:21 · 492 阅读 · 0 评论 -
设计模式之禅5:迪米特法则
https://www.cnblogs.com/zh7791/p/7922960.html定义:一个对象应该对其他对象保持最少的了解。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。 PS: 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还...转载 2016-05-31 14:06:15 · 729 阅读 · 0 评论 -
SVN手册
---------------------------------------------操作步骤1. 本地建立仓库:在本地新建文件夹,右键 —> TortoiseSVN —> Create repository here;2. 下载已有仓库:在本地新建文件夹,右键 —> Checkout —> 输入用户名密码、下载的文件路径;3. 更新本地仓库:选中仓...原创 2016-11-14 09:42:54 · 464 阅读 · 0 评论 -
【vs C++】error LNK2019: 无法解析的外部符号 "public: void __thiscall
1 很多编译器显示错误,并不是本行,而是上一行的错误(看出错前后几行一般能找到问题) 2 一般报一堆错误,找第一个错误改了再编 Log出现这个错误,应该首先查看“#include”语句是否包含,或者是否包含正确。符号无法解析意味着编译器知道有这个符号存在,也就是有声明,但在链接时,找不到实现代码,那么就去看看报错的这个函数有没有实现代码。如果它们的确已经有了,还是出现这个错误,就把它们重...转载 2018-03-20 17:06:34 · 3826 阅读 · 1 评论 -
openGl零基础完成贪吃蛇游戏(二)
用OpenGL+C++写的一个小的3D游戏—3D贪吃蛇目标:实现初始化游戏窗口,将初始化过后的蛇的身体显示出来。注意点:在codeblocks的环境中生成opengl项目后,会生成一个模板,需在程序开头加上#include <windows.h>#define GLUT_DISABLE_ATEXIT_HACK#include <windows.h>#d...转载 2019-03-07 10:03:44 · 550 阅读 · 0 评论 -
C++将析构函数为啥需要定义成virtual
一般来说,如果一个类要被另外一个类继承,而且用其指针指向其子类对象时,如题目中的A* d = new B();(假定A是基类,B是从A继承而来的派生类),那么其(A类)析构函数必须是虚的,否则在delete d时,B类的析构函数将不会被调用,因而会产生内存泄漏和异常;在构造一个类的对象时,先构造其基类子对象,即调用其基类的构造函数,然后调用本类的构造函数;销毁对象时,先调用本类的析构函数,然后再...原创 2019-07-25 19:40:11 · 303 阅读 · 0 评论 -
C++ 模板类的默认模板参数、模板函数不支持默认模板参数
C++函数模板原创 2014-06-15 22:01:19 · 6224 阅读 · 0 评论 -
C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,sta转载 2014-05-06 21:52:45 · 624 阅读 · 0 评论 -
C++ 调用C函数
这种需求很多,又因为C++和C是两种完全不同的编译链接处理方式,所以要稍加处理.总结大致有两大类实现方法.文中给出的是完整的,具体的,但又最基本最简单的实现,至于理论性的东西在网上很容易搜索的到. 一.通过处理被调用的C头文件a.h:#ifndef __A_H#define __A_H#ifdef __cplusplusextern "C"原创 2014-05-11 17:05:56 · 605 阅读 · 0 评论 -
STL 之 list
STL中的list就是一双向链表,可高效地进行插入删除元素。现总结一下它的操作。文中所用到两个list对象c1,c2分别有元素c1(10,20,30) c2(40,50,60)。还有一个list::iterator citer用来指向c1或c2元素。list对象的声明构造():A. listc0; //空链表B. l转载 2014-02-25 20:45:12 · 735 阅读 · 0 评论 -
C++ Vector 使用心得 --- 非常好的总结
C++ Vector 使用心得分类: C/C++2013-12-13 08:16 102人阅读 评论(0) 收藏 举报原文链接:http://software.intel.com/zh-cn/blogs/2011/08/10/c-vector标准库Vector类型使用需要的头文件:#include Vector:Vector 是一个类模板。不是一种数转载 2014-03-10 21:27:41 · 2874 阅读 · 0 评论 -
c++ template笔记(1)模板函数
二、function template不能有默认模板参数,如下则报错 int c = 10;//定义一个变量,用于作为T2的默认值 //为b设定一个默认参数template typename T1, typename T2 >inline T1 max( const T1& a, const T2& b = c ){retur原创 2014-03-10 21:12:00 · 914 阅读 · 0 评论 -
C++ string
有这么多初始化方式:a) string s; //生成一个空字符串s b) string s(str) //拷贝构造函数 生成str的复制品 c) string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值 d) string s(str,stridx,strlen) //将字符串str内"始于stridx且长度顶多strlen"的原创 2014-03-10 15:15:00 · 558 阅读 · 0 评论 -
骆驼命名法,帕斯卡命名法与下划线命名法
骆驼式命名法: 正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:插入代码: printEmployeePaychecks(); print_employee_paychecks(); 第一个函数名使用了骆驼式命名法,函数名中的每一个逻辑转载 2014-03-11 17:05:11 · 12537 阅读 · 0 评论 -
c++ 头文件包含问题
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法:编码时,我们一般会尽量避免 include 头文件,而是采用声明 class XXX 。 但有时候还是必须用 Include 头文件,那么,两者的划分在于什么呢?转载 2014-03-13 21:45:10 · 719 阅读 · 0 评论 -
C++学习:模板类学习
按照WHAT, WHY, HOW的思路学习。1. 什么是C++模板?答:模板就是实现代码重用机制的一种工具。它实现了将类型参数化,就是将类型定义为参数,实现了真正的代码可重用性。模板分为两大类:函数模板和类模板。由于类模板包含类型参数,所以类模板又称作参数化的类。如果说类是对象的抽象,抽象是类的实例;那么可以说类模板是类的抽象,而类是类模板的实例。利用类模板可以建立各种数据类型的类。2转载 2014-03-09 20:43:30 · 718 阅读 · 0 评论 -
C++ static
静态成员变量只能被静态成员函数调用。静态成员函数也是由同一类中的所有对象共用。只能调用静态成员变量和静态成员函数。 C++中的静态成员函数与C中的静态函数有什么区别和联系? 回复于:2012-04-23 09:29:02静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生.所以静态成员不能直接访问. 静态的使用注意事项:1.静态方法只能访问静态成员(包括成原创 2014-03-13 11:30:22 · 457 阅读 · 0 评论 -
c/c++中内存区域划分大总结
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放转载 2014-04-30 17:06:14 · 580 阅读 · 0 评论 -
C++ 11
nullptr始终使用nullptr表示一个null指针值,绝不要使用数字0或者NULL宏,因为它们也可以代表一个整数或者指针从而产生歧义。12345// C++98 int* p = 0; // C++11 int* p = nullptr;原创 2014-04-30 18:01:01 · 603 阅读 · 0 评论 -
const
不过const修饰指针就需要注意一下了。要是修饰的类型不是指针,比如int之类,const放在int之前和int之后是一样的,比如const int a = 2;int const a = 2;有着同样的效果。我自己偏向于第一种写法,其实想想,第二种写法更为合理,表示修饰变量a本身,所以a的值不可变。当类型为指针时,以星号*为界, const加在左右两边,有不同的意思。1) c原创 2014-04-08 11:26:28 · 462 阅读 · 0 评论 -
30分钟了解C++11新特性
最近学习了C++11的新特性,将学习内容整理下来以巩固记忆,C++11的新特性,可以分为两部分,第一部分是C++11核心语言的特性,第二部分是STL标准库的新特性。原创 2014-04-30 17:35:41 · 623 阅读 · 0 评论 -
设计模式
老师说: 设计模式 1:实现代码重用 2:已修改 易扩展 易维护3原创 2014-04-24 10:23:06 · 576 阅读 · 0 评论 -
memset sprintf
void main( void ){ char buffer[] = "This is a test of the memset function"; printf( "Before: %s\n", buffer ); memset( buffer, '*', 4 ); printf( "After: %s\n", buffer );}OutputBef原创 2014-04-23 17:30:41 · 982 阅读 · 0 评论 -
C++11 新特性练习
***************************************************using namespace std;struct TEST{ int a; int b; int c;};struct TT{ char *name;原创 2014-05-08 13:36:40 · 740 阅读 · 0 评论 -
C++ 继承
原创 2014-04-24 11:03:58 · 514 阅读 · 0 评论 -
STL常见函数总结
STL常见函数总结 #include #include #include #include #include #include #include #include #include #include 容器和算法 顺序容器 1 vector//支持快速随机访问 vector转载 2014-02-24 21:44:07 · 740 阅读 · 0 评论