C++
文章平均质量分 68
秦伟H
目标是略懂:C++,深度学习,三维重建,CV,SLAM,无人机,无人车,多传感器融合,组合导航。有事邮件:qw072117@foxmail.com huqinwei987@gmail.com
展开
-
vs2015(VS2017等)配置属性里面没有c/c++ bug
事发过程与问题:使用VS建过C#的工程,再打开C++工程,新建一个项目,空工程,找不到配置属性页(可能也经历过一些自动关键和断电之类的异常情形,但不确定是导致bug的原因)。使用包括win32控制台程序等多种方式,都不存在C/C++页,而同解决方案的其他旧工程正常。解决方式:随便编译一次新加工程,页签恢复对此只能解释为bug后续:在此之后,重启VS,新建项目,现象没缓解,暂时需要编译每...原创 2021-04-15 11:37:53 · 5975 阅读 · 1 评论 -
无法解析的外部符号——shell32.lib——VS宏定义问题——%(AdditionalDependencies)
严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK2019 无法解析的外部符号 __imp_SHGetSpecialFolderPathA,该符号在函数 "public: static class SEACAVE::String __cdecl SEACAVE::Util::getApplicationFolder(void)" (?getApplicationFolder@Util@SEACAVE@@SA?AVString@2@XZ) 中被引用...原创 2020-09-07 20:16:52 · 2449 阅读 · 0 评论 -
C++中的三目运算符返回的是左值还是右值?
看到有人说“三目运算符在C语言中是右值,右值不可以被赋值。但在C++中,三目运算符是左值,左值可以赋值。”他的demo如下:#include<iostream>#include<cstdlib>int main(){ int a = 1, b = 2; // C++中的三目运算符是左值 a > b ? a : b = 10; std::cout << "a=" << a << std::e.原创 2020-07-27 14:55:30 · 1069 阅读 · 0 评论 -
sqlite3:锁机制、stmt加速、wal日志模式、多进程并发、写互斥
最近需要做sqlite的并发优化,会有一些多主机多进程的操作失败问题,所以学习一下,顺便为了翻阅,做一个笔记收集。未完成。。。。。。。。。。。。。。。。。。。to be continued目前只对我某时刻最关注的点做笔记,默认简单的就跳过了。工作和时间原因,顺序有些乱,可能随时遇到问题就插进去了。锁机制与事务类型https://www.cnblogs.com/l...原创 2019-12-23 20:17:02 · 4742 阅读 · 4 评论 -
关于do{...}while(FALSE);
今天看MFC的代码,无意中发现这样一种用法,当时觉得都原创 2014-05-19 23:41:00 · 7391 阅读 · 0 评论 -
C++primer pe13_15(还有13——4、9、12中NoName类的指针疑惑)
new Sales_item; new Sales_item; new Sales_item; new Sales_item;//这些必须主动delete//计算析构函数的调用次数,在析构函数中定义了一个打印语句以供判断#include"head.h"#include"Sales_item.h"void fcn(const Sales_item *trans,原创 2012-04-23 10:36:14 · 822 阅读 · 0 评论 -
C++ primer -pe13——10
小总结:赋值操作符和复制初始化通常在一起使用,两个都有合成版本,有时候可以不用管另外private: Class(const Class &);可以防止用户代码复制该类对象,但是友元和成员仍可进行复制,就干脆只声明不定义,此种方法只是防止出现结果,但不能阻止调用,调用将导致链接失败。//那么,怎么用成员和友元来测试这个复制呢,明天解决回忆了一下static知识点,利用变原创 2012-04-22 23:55:16 · 762 阅读 · 0 评论 -
句柄的使用~接上边句柄定义--《C++ primer》笔记
坐火车了,不学了,今天的绝笔。。。。。。====================================================================================================================================接上边,因为容器管理对象太麻烦,存基类和派生类都不好,指针不好管理,所以要用原创 2012-05-06 16:21:12 · 1774 阅读 · 0 评论 -
抽象基类,容器、句柄类与继承--《C++ Primer》笔记
纯虚函数(pure virtual function),包含纯虚函数的类是抽象基类(abstract base class)。不能创建抽象类型的对象(object)。方法,在函数形参表后面写上 = 0,如果写1,error: invalid pure specifier (only ‘= 0’ is allowed) before ‘;’ token使用目的,防止用户建立Disc_item原创 2012-05-05 23:14:17 · 7693 阅读 · 1 评论 -
继承情况下的类作用域
构造函数和析构函数中的虚函数,构造和析构也是分阶段的,也就是说从无到基类对象,再到派生类对象,从派生类对象到基类对象,再到无。这中间有一个状态就是基类对象,此时直接或间接调用虚函数,只能是基类中的版本,因为后边的还没形成呢。因为如果使用派生类中的版本,可能需要访问派生类对象的成员,而这些还不存在,为了避免这个崩溃风险,就给屏蔽了。继承情况的类作用域:派生类的作用域嵌套在原创 2012-05-04 18:10:49 · 1617 阅读 · 0 评论 -
Live555生成Win下VS解决方案及项目工程
重新整理过程新建解决方案和四个库项目并生成库文件:首先新建个路径作为解决方案根目录,新建四个empty project空项目:BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment路径生成了。把live555对应的四个路径复制过来,合并,简单说就是源文件和头文件路径,不着急添加源文件到项目工程,添加也成,就是添加现成文件ad原创 2014-11-11 21:13:54 · 2526 阅读 · 0 评论 -
C++ virtual函数 实现机制
不知道关键词用的对不对(什么smartPtr之类的,也不是本来意思,就是随便起个名字),就是看看virtual这个属性是怎么向下(子孙)继承的,又能不能取消掉测试代码如下:#includeusing namespace std;class A{public: virtual void printSelf(){cout << "A" << endl;}pri原创 2016-02-17 22:11:29 · 7928 阅读 · 2 评论 -
C++ virtual函数 实现机制——虚函数地址在虚表中的分布
C++ virtual函数 实现机制中,已经学习了虚函数和虚函数表的机制,但是还是很多细节没解决,这里就探讨一下夹心层的问题。放例子——虚表跳转,利用虚函数地址强行执行:#include#includeusing namespace std;class B{public: //virtual ~B(){cout <<"B destruction"<<end原创 2016-10-10 23:51:35 · 1647 阅读 · 0 评论 -
玩游戏写算法——汉诺塔
玩了个汉诺塔的flash游戏,总结下算法四五层就不说了,太长,4层要15步,每步一截屏就刷死了,其实要想归纳出规律,最好还是玩四五层看看,多了才出规律。以三层为例,步骤如下:归纳成算法:步骤拆解,注意我说的第N-几个盘子是从上边数的,和此游戏相反注意:每一原创 2015-04-19 23:00:56 · 2861 阅读 · 0 评论 -
圈圈叉叉/井字棋/TicTacToe——C/C++实现
无聊,写个小游戏,井字棋思路:棋盘表达:二维数组打印棋盘状态:数组元素标识:未下棋,下O和下X。棋手:加计数器,奇偶判断区分两棋手。胜利判断:横竖斜,一方能先连起来,这个直接拿出数据来比一下。还有棋盘下满等情况。 来来来,V1.0诞生了 #include<iostream>using namespace std;typedef enum Ti...原创 2016-10-11 23:44:32 · 10792 阅读 · 0 评论 -
C++引用的本质与修改引用的方法
本文不探讨罗列引用的概念,什么函数传参之类的,这些基础概念和用法很容易搜到~!本文主要探讨引用和指针在C语言的下一层——即汇编或者确切的说是伪汇编(AT&T伪汇编都一样的代码,你指望下层x86汇编还能不一样么~)——的实现过程,来摸索一下他们的特点与本质。首先,引用(Reference)在C中没有,是C++ 才有的概念~! 要用g++编译器。定义:引用就是某个目标变原创 2014-05-02 15:52:12 · 12716 阅读 · 3 评论 -
C 位操作 左移32位 错误
搬砖拼接64位数字,因高32位long未先强转64,导致拼接失败,顺便发现个问题,32位变量左移32位等于原数值。C下位移操作为逻辑位移,全部左移补零后,数值应为零,结果和预期不符,遂查找症结所在。代码如下:long i = 512;i = i << 32;结果i == 512作为对比:32次i << 1结果是0short i = 512;i...原创 2017-04-28 21:28:52 · 13904 阅读 · 3 评论 -
C语言结构体(struct)常见使用方法
注意:盗版是不会得到修正和更新的!今天复习一下struct,顺便挖掘一下以前没注意的小细节:基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。(因为C++和C有共通之处,但是在结构体上的某些机制又有所不同,所以后边提了一下,不喜欢可以略过)结构体定义:...原创 2014-04-14 01:51:57 · 654579 阅读 · 61 评论 -
复制控制和继承--《C++ primer》笔记
复制构造函数和赋值操作符#includeclass Base {public: Base(double t = 1.2) : test(t) {}public: double test; };class Derived : public Base {public://复制构造函数不会自动唤醒 //Base::Base(const Base&) not invoked原创 2012-05-04 00:54:12 · 2231 阅读 · 0 评论 -
转换与继承--《C++ primer》笔记
派生类到基类的转换基本上可以直接转,就提取派生类的基类部分就行了,其余的“切掉”(忽略)//派生类和基类的转换,想把派生类对象转成基类对象,基本上是各种直接间接的“复制”,通过copy-constructor 和operator=等形式,把派生类对象的基类部分赋予新对象#includeclass Item_base{};class Bulk_item : public Ite原创 2012-05-03 01:53:32 · 3018 阅读 · 0 评论 -
C++ Primer中智能指针的一个小疑惑,是书中的bug?
C++中的管理指针成员方法,有一个是智能指针。《C++ Primer》原书495,译本424这个位置意思很简单,利用一个U_Ptr类充当HasPtr的私有计数类,防止多个HasPtr对象调用析构delete同一个基础对象(int)class U_Ptr{ friend class HasPtr; int *ip; size_t use; U_Ptr(int *p):原创 2012-04-24 21:53:15 · 1655 阅读 · 2 评论 -
C++ 面试 笔试 题 笔记
进程间通信:管道和有名管道named pipe、信号signal、消息队列message queue、共享内存shared memory、信号量semaphore、套接字线程间:消息、信号量、事件。C++多线程问题一些算法C/C++程序员面试宝典百度百科有里边题目目录http://blog.csdn.net/jingxuewang110/article/de原创 2012-04-22 10:14:06 · 1221 阅读 · 0 评论 -
操作符重载
注意事项:有些必须是成员函数,比如,下标操作,赋值操作,有些最好不是,比如对称的比较==自定义操作符至少要满足基本需要:比如在关联容器中的键类型需要BTW,很多操作最好对应出现,比如+对应+=;==对应!=;>对应 >= Q1:如果不定义,有些操作符没意义,比如赋值,取地址和逗号操作符,但是Sales_item没定义operator&,却可以取地原创 2012-04-25 10:59:19 · 1322 阅读 · 0 评论 -
《C++primer》操作符重载之CheckoutRecord相关
有个稍微特殊的容器成员,定义从输入到输出,到下标等的一系列操作符 PE14.7//为下面的类顶一个一个输出操作符,#include"head.h"class CheckoutRecord{public: CheckoutRecord(std::vector* > wait_list): book_id(0.0), title("hell"), date_borr原创 2012-04-26 13:07:58 · 1451 阅读 · 0 评论 -
算术操作符和关系操作符(1)
建议模式:用+=操作而不是+,省去了复制对象习题14.12,是用+=去调用+,缺点自然是复制很多次,不过为什么会出错,this不是和rhs一样的引用么?因为是成员函数,this错在哪了inlineSales_item& Sales_item::operator+=(const Sales_item &rhs){ Sales_item item; ite原创 2012-04-26 00:54:08 · 920 阅读 · 0 评论 -
两层指针共用一个智能指针控制基本对象的操作--成员访问操作符
智能指针,让ScreenPtr指向ScrPtr,来控制基础对象ScreenPtr(Screen *p): ptr(new ScrPtr(p)) {}解引用和箭头操作 Screen operator*(){return *ptr->sp;} Screen* operator->(){return ptr->sp;}两个小缺陷,第一个是未定义const版本,第二个是返回的原创 2012-04-26 23:09:25 · 1468 阅读 · 0 评论 -
自增自减操作符的前后缀,下标和解引用操作与自增自减一起使用,还有指针加减法的实现--围绕CheckedPtr类
原例,类//自增自减操作,前缀后缀,后缀调用前缀来实现,同!=调用==#include"head.h"//用来处理数组//后面习题14_23起,对类进行完善,找代码去后边class CheckedPtr{public: CheckedPtr(int* b, int* e): beg(b), end(e), curr(b) {}public: CheckedPtr&原创 2012-04-27 12:52:37 · 3161 阅读 · 0 评论 -
调用操作符和函数对象
p451-p467今天不看完第三部分不睡觉~!!!!!!!!!!!!!!!!!!日,明天还要爬山。。简单说来,就是可以把对象当成函数看//函数对象,#include"head.h"struct absInt{ int operator() (int val){//求绝对值 return val < 0 ? -val : val; } };int main()原创 2012-04-27 22:28:59 · 2425 阅读 · 1 评论 -
自定义自加自减下标解引用等问题--围绕CheckedPtr类 续14.26题
pe14_26_2.cpp//dui 26题的优化适当的const保护,还有操作符函数的定义顺序最好遵从声明顺序,看起来清晰一点#include"head.h"//版本二,优化加减法判断问题,我要把加负数的情况直接转化为调用减法,反之相反//调用相反操作符时传递参数要注意,传入(0 - change)有个转化class CheckedPtr{public: CheckedP原创 2012-04-27 16:39:05 · 1539 阅读 · 0 评论 -
标准库定义的函数对象--接“将函数对象用于标准库算法”
标准库头文件中定义了一组类似于前边的GT_cls的函数对象。奇怪的是不需要include(mark)有一元函数对象:一元减minus和逻辑非logical_not其余都是二元函数对象一个简单实例:chap/functionObject.cpp#include"head.h"//#includeint main(){ std::plus intAdd;//fun原创 2012-04-28 01:37:59 · 1034 阅读 · 0 评论 -
第四部分:十五章 面向对象编程:派生
基本概念接触基类与派生类,虚函数,多态,动态绑定思想:共同点做基类的公共部分,保留每个派生类都具有的共性,然后根据各自特点override原来的virtual函数(成员),代码重用吧也算dynamicBinding.cpp//定义基类base class,虚函数virtual,protected权限,虚析构函数virtual destructor,动态绑定dynamic原创 2012-04-29 16:47:15 · 1228 阅读 · 0 评论 -
转换与类类型
转换操作符//类类型转换、转换操作符#include"head.h"class SmallInt{public: SmallInt(int i = 0): val(i){ if(i 255) throw std::out_of_range("Bad SmallInt initializer"); } //期待不合格——id 在输入的末端?~类末端老忘了分原创 2012-04-29 14:40:47 · 1277 阅读 · 0 评论 -
将函数对象用于标准库算法
标准库函数对象,eg.equal_to适配器eg. bind2nd(less_equal(), 10)not1(bind2nd(less_equal(),10))//函数对象的函数适配器#include"head.h"int main(){ //绑定器binder:bind1st,bind2nd;绑定一个现成的实参到二元函数对象函数第一个或第二个参数,使之变成一元函数原创 2012-04-29 00:04:21 · 1262 阅读 · 0 评论 -
virtual与其他成员函数--《C++ primer》 笔记
从派生类到基类的转换基本使用方法:double print_total(const Item_base&, size_t){std::cout << "test" << std::endl; return 0.3;} //function with an Item_base reference parameter Item_base item; //object o原创 2012-04-30 01:14:12 · 1503 阅读 · 1 评论 -
公有、私有和受保护的继承--《C++ primer》笔记
protectedInheritance.cpp间接继承和书本描述不一致,书上说因为第一重继承变private,第二重继承才无法访问Base::i~是private,现实是提示Base::i是protected,好像跳过Private_derived类直接找基类了。继承对基类的保护,还是普遍规律,只能越来越严,不能变松。还有,标号不是限制派生类对基类成员(表达不清楚,是基类成员还是从基原创 2012-05-01 01:03:19 · 1991 阅读 · 1 评论 -
继承与静态成员,转换与继承
继承与静态成员,搞不太懂,这些乱七八糟的名词(mark)staticDerived.cppstatic,"整个继承层次只有一个这样的成员,无论从基类派生出多少类,每个static成员只有一个实例"读不太懂,是说不能覆盖之类的吧,对了,覆盖是无视基类部分的成员,还是修改了基类部分?实践证明,virtual和static都可以在派生类中重写函数,并且都不是“覆盖”,通过作用域控制符就可原创 2012-05-02 14:45:01 · 1234 阅读 · 0 评论 -
友元关系与继承——《C++ primer》笔记,书中的小bug
友元关系,friendship不能继承,书中想表达的意思是这种friendship不能继承是双向的。也就是说,自己朋友的儿子不能访问自己,朋友也不能访问自己的儿子,唯一的关联是朋友和自己但是,书中的代码表达确实是有错误的,如果我的想法是错的,欢迎指正。。。。。。。。。。。。测试代码如下://派生类不能继承友元关系,双向的,既不能享受访问权力也不能被访问#include原创 2012-05-02 11:29:37 · 3165 阅读 · 2 评论 -
类的指针成员管理
之前纠结的那个NoName中的指针成员问题,13.5章有集中讨论了类的指针成员管理:danglingPtr.cpp删除ip后的一些操作和结果: delete ip;std::cout 书中老是说不明白这个问题,前边的NoName应该就是表达错误如果析构中真的有delete *ptr;这种删除对象的析构的话, int i = 42; HasPtr p1(&i, 42);直接就内存原创 2012-04-23 23:28:33 · 823 阅读 · 0 评论