- 博客(35)
- 收藏
- 关注
原创 Git 常用命令
Git 常用命令仓库在当前目录新建一个Git代码库$ git init新建一个目录,将其初始化为Git代码库$ git init [project-name]下载一个项目和它的整个代码历史$ git clone [url]配置显示当前的Git配置$ git config --list编辑Git配置文件$ git config -e [--global]设置提交代码时的用户信息$ git config [--global] user.name "[name]"$ git
2021-09-08 22:51:14
448
原创 C++ 面试知识点总结
目录关键字`static`:控制变量的存储方式和可见性`const`:常量限定符,告知编译器该变量是不可修改的`extern`: 外部变量/函数声明引用`volatile`:易变的`sizeof`:判断数据类型或表达式长度的运算符基础语法常见问题1. 堆和栈的区别2. 数组和指针的区别3. 全局变量和局部变量的区别4. 空指针和悬垂指针的区别5. `sizeof` 与 `strlen` 的区别6. `const` 和 `#define` 的区别7. 文件包含用中括号和引号的区别8. 指针(*)与引用(&am
2021-09-01 22:28:38
2511
原创 gtk新手入门须知
##Gtk 新手入门须知#####参考网站###官网下载:GTK(window+linux)官网参考文档:GTK 3.0 (重点参考demo)Linux自定gtk2.0,安装gtk3.0后指定库版本。编译命令:gcc gtk_example.c -o gtk_example `pkg-config --libs --cflags gtk+-3.0`较大工程建议采用cmake构建工具###基本要素###界面设计采用glade工具进行图形化设计,生成’.glade’后缀文件,通过gtkbuild
2020-06-26 11:36:53
574
原创 Qt: The Meta-Object System
Qt的Meta-Object 系统提供了信号-槽机制,用于对象之间的通讯,运行类型信息和动态属性系统。Meta-Object基于以下三件事:QObject类提供了一个对象能够利用Meta-Object系统的基类;Q_OBJECT宏在类声明的私有部分,被用来使能Meta-Object特性,例如动态属性,信号槽;Meta-Object Compiler(moc)提供给每个QObject子类需...
2019-11-08 20:48:45
211
原创 Data 语意学
class X {};class Y : public virtual X {};class Z : public virtual X {};class A : public virtual Z {};sizeof(X) // result 1sizeof(Y) // result 8sizeof(Z) // result 8sizeof(A) // result 12空的cla...
2019-10-20 11:05:44
262
原创 成员们的初始化队伍
必须使用member initialization list的四种情况:当初始化一个reference member时;当初始化一个const member时;当调用一个base class的constructor,而它拥有一组参数时;当调用一个member class的constructor,而它拥有一组参数时。class Word { string _name; ...
2019-10-19 18:44:03
200
原创 编译器优化
X bar(){ X xx; //...处理xx return xx;}所有的return指令传回相同的具名数值(xx),因此编译器可能自己做优化,方法是以result参数取代named return value(NRV)。编译器把其中的xx以_result取代:void bar(X& _result) { // default construc...
2019-10-17 21:52:23
363
原创 程序员优化
X bar(const T& y, const T& z){ X xx; ... return xx;}那会要求xx被“memberwise”地拷贝到编译器所产生的_result之中,如下。// 可能转换的伪码void bar(X& _result, const T& y, const T& z){ X xx;...
2019-10-17 20:35:35
279
原创 程序转化语意学
显示的初始化操作X x0;void foo_bar(){ X x1(x0); X x2 = x0; X x3 = X(x0);}重写每一个定义,其中的初始化操作会被剥除;(“定义”严格来讲是“占用内存”的行为)class 的 copy constructor会被安插进去。// 可能转换的伪码void foo_bar(){ X x1; //定义...
2019-10-17 20:09:14
180
原创 Copy Constructor 的构造操作
以一个object的内容作为另一个class object的初值的三种情况:对一个object做显式的初始化操作; class X{};X x; X xx = x;当object被当做参数交给某个函数 extern void foo(X x); void bar() { X xx; foo(xx);…}当函数传回一个class object时 X foo_bar() {X xx; …ret...
2019-09-22 20:30:36
249
原创 Bitwise Copy Semantics
Bitwise Copy Semantics (位逐次拷贝)#include "Word.h"Word noun("book");void foo(){ Word verb = noun; ... }如果Word没有定义explicit copy constructor,那么是否会有一个编译器合成的实例被调用?这的看该Word是否展现“bitwise copy ...
2019-09-22 16:55:16
693
原创 如果有多个class member objects 都要求constructor初始化操作,将如何?
C++语言要求以“member objects 在class中的声明顺序”来调用各个constructors。这一点由编译器完成,它为每一个constructor安插程序代码,以“member声明顺序”调用呢每一个member所关联的default constructors。这些代码将安插在explicit user code之前。举个例子class Dopey { pulic:Dopey();...
2019-09-21 19:45:19
201
原创 Default Constructor 的构造操作
当编译器需要的时候,而不是程序员需要(初始化为0的操作),一个nontrivial default constructor就是编译器所需要的那种,必要的话由编译器合成出来。nontrivial default constructor 的4种情况:1. “带有Default Constructor”的Member Class Object如果一个class 没有任何constructor,...
2019-09-21 19:43:35
366
原创 在C++各个不同的编译模块中,编译器如何避免合成出多个default constructor呢?
在C++各个不同的编译模块中,编译器如何避免合成出多个default constructor(比如说一个是为A.C文件合成,另一个是为B.C文件合成)呢?解决方法是把合成的default constructor、copy constructor、destructor、assignment copy operator都以inline方式完成。一个inline函数有静态链接是(static link...
2019-09-21 19:40:16
171
原创 C++程序设计模型直接支持三种programming
C++程序设计模型直接支持三种programming程序模型(面向过程):就像C一样,C++当然也支持它;抽象数据类型模型(ADT abstract data type model 如今称之为OB object-based):所谓的“抽象”是和一组表达式(public 接口)一起提供的,那时其运算定义仍然隐而未明。例如string;面向对象模型(OO object-oriented mod...
2019-09-21 19:39:02
545
原创 一个class object需要多少内存
其non-static data members的总和大小;加上任何由于alignment的需求而填报padding上去的空间(可能存在于members之间,也可能存在于集合体边界);加上为了支持virtual而由内部产生的任何额外负担overhead。...
2019-09-21 19:37:31
240
原创 多态的主要用途
多态的主要用途是经由一个共同的接口来影响类型的封装,这个接口通常被定义在一个抽象的base class中。这个共享接口是以virtual function机制引发的,它可以在执行期根据object的真正类型解析出到底哪一个函数实例被调用。这不只使得“当类型有所增加、修改或删减时,我们的程序代码无须改变”,而且也使一个新的subtype的供应者不需要重新写出“对继承体系中的所有类型都共通”的行为和操...
2019-09-21 19:36:50
1210
1
原创 c++以下列方法支持多态
经由一组隐式的转换操作。例如把一个derived class 指针转化为一个指向其public base type的指针:Shape* ps = new Circle();经由virtual function机制:ps->rotate();经由dynamic_cast 和typeid运算符if (Circle pc = dynamic_cast<Circle>(ps)...
2019-09-21 19:34:28
200
原创 C++对象模式
class Point {public: Point(float xval); virtual ~Point(); float x() const; static int PointCount();protected: virtual ostream& print(ostream &os) const; float...
2019-09-21 19:30:48
302
原创 加上封装后的布局成本
member function虽然含在每个class object之内,却不出现在object之中。每一个non-inline member function只会诞生一个函数实例。inline function则会在其每一个使用者(模块)身上产生一个函数实例。(函数体的替换)封装并未带来任何空间或执行期的不良后果。C++在布局以及存取时间上的主要的额外负担是由virtual引起的,包括:1...
2019-09-21 19:19:20
181
原创 C++异常:禁止异常消息传递到析构函数外
两种情况下会调用析构函数:1.正常情况下删除对象,例如对象超出作用域或被显得delete;2.异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。在析构函数使用try-catch捕获异常,禁止异常消息传递到析构函数外,两原因:1.能够在异常传递的堆栈辗转开解(stack-unwinding)过程中,防止terminate被调用;2.能帮助确保析构函...
2019-03-05 22:52:08
243
原创 C++异常:使用析构函数防止内存泄露(智能指针的析构函数)
利用智能指针的思想:用一个对象存储需要被自动释放的资源,然后依靠对象的析构函数来释放资源。这种思想不只是可以运用在指针上,还能用在其它资源的分配和释放上。...
2019-02-28 22:33:29
1410
原创 使用raw指针和make_shared创建shared_ptr对象,优先使用make_shared,unique_ptr也一样
先介绍不能使用make_shared的场景:1.当你需要定制一个删除器,例如采用shared_ptr管理非内存资源或者一个分配在非标准内存区域的对象。这时候不能使用make_shard,它不支持指定删除器;2.当你正在采用其他代码产生的raw指针(指向你需要处理的对象),直接采用raw指针构造share_ptr对象。更适合使用make_shared的原因是:1.用起来更清晰,准确;2.效率比直接...
2018-09-02 20:28:55
1242
原创 智能指针:shared_ptr和unique_ptr,优先使用unique_ptr
智能指针是比raw 指针更智能的类,解决 dangling指针或多次删除被指向对象,以及资源泄露问题,通常用来确保指针的寿命和其指向对象的寿命一致。智能指针虽然很智能,但容易被误用,智能也是有代价的。通常有两大类型的智能指针:独占式unique_ptr和共享式shared_ptr。这两者的区别和使用场景,更适合使用unique_ptr的场景:1.语义简单,即当你不确定使用的指针是不是被分享所有权...
2018-09-02 20:10:04
5383
原创 解决:ASSERT failure in QWidget: “Widgets must be created in the GUI thread.“
这类错误是因为Qt规定了UI主线程只有一个,在另外一个线程生成UI相关对象或对对其进行相关操作,例如QWidget或其子类的构造和相关操作,都会出现此断言错误 。 解决方法是:通过信号槽实现线程通讯方式,在非UI主线程发生个信号,让UI主线程调用槽函数进行相关的界面操作。connect连接方式是QueuedConnection...
2018-08-31 22:31:53
14263
1
原创 解决:QObject::connect queue arguments of type ‘xxxx’,Make sure ‘xxxx’ is registered using qRegister
解决方法:在调用connect之前,通过 qRegisterMetaType() 注册你connect函数里对象的类型代码如下: typedef QString CustomString;//你自己定义的类型 qRegisterMetaType&lt;CustomString&gt;(“CustomString”);//注册你自己的类型 connect(…)//之后connect...
2018-08-31 21:51:25
2976
原创 解决:QWidget: Must construct a QApplication before a QWidget
Do you have any static QWidgets in your application? Static objects are instantiated before main gets control.
2018-08-21 13:34:52
17095
5
原创 解决:VS2015 + Qt 提示 There‘s no Qt version assigned to this project for platform Win32
设置问题,项目右键菜单, 选择 “Qt Project Settings” ,会显示如图的框:将最后一个 Version字段, 选择指定的Qt 版本即可。
2018-04-28 09:23:53
9047
1
原创 解决:could not find or load the Qt platform plugin “windows“
QT安装目录下找到platforms 文件夹,复制到.exe目录下
2018-04-28 09:20:14
1012
原创 解决:在VS配置,生成MOC.cpp文件,解决link。。。unsolved meta问题
在VS中设置,这样每次编译自动生成:1.在solutionexplorer窗口中,右击要生成moc文件的头文件,选择"Properties";2.弹出的窗口左边,"ConfigurationProperties"下面点击"General",将右边第二行的ItemType后面内容改成"CustomBuildTool";3.这时候左边会新出现一栏"Custom...
2018-04-02 17:16:31
992
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人