C++
文章平均质量分 65
阳光_你好
这个作者很懒,什么都没留下…
展开
-
qt项目用qInstallMessageHandler函数输出log日志
在Release模式下,编译器产生的机器码是经过优化的。这种优化会导致在生成的可执行文件中去除了调试符号信息,从而无法通过调试符号信息获取行号等信息。原创 2023-05-31 14:52:07 · 243 阅读 · 0 评论 -
qt 定时器用法
在qt开发中,定时器是我们经常用到的。我们接下来说一下定时器的三种用法,需要注意的是定时器事件是在主线程中触发的,因此在处理耗时操作时应特别小心,以避免阻塞应用程序的事件循环。原创 2023-12-07 10:18:45 · 1229 阅读 · 0 评论 -
栈区,堆区,全局静态区,常量区,代码区
3、全局区(静态区)(static):全局变量和静态变量的存储都是在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域, 程序结束后有系统释放。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。2、 函数出现无限递归调用,函数调用的时候会将一些运行相关的信息压栈,这个也就好理解了。4、常量区:常量、字符串常量池就是放在这里的, 程序结束后由系统释放。原创 2022-12-19 10:07:45 · 388 阅读 · 1 评论 -
C++中的虚函数和纯虚函数详细讲解
假设我们有下面的类层次class A {public :} };// 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!return 0;}这个例子是虚函数的一个典型应用,通过这个例子,也许你就对虚函数有了一些概念。它虚就虚在所谓"推迟联编"或者"动态联编"上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为"虚"函数。原创 2022-12-08 14:05:53 · 5978 阅读 · 0 评论 -
C++中类成员初始化方式详细说明
在C++98中,支持了在类声明中使用等号“=”加初始值的方式,来初始化类中静态成员常量。这种声明方式我们也称之为“就地”声明。就地声明在代码编写时非常便利,不过C++98对类中就地声明的要求却非常高。如果静态成员不满足常量性,则不可以就地声明,而且即使常量的静态成员也只能是整型或者枚举型才能就地初始化。而非静态成员变量的初始化则必须在构造函数中进行。2.构造函数初始化3.声明时初始化(也称就地初始化,c++11后支持)在C++98中,支持了在类声明中使用等号“=”加初始值的方式,来初始化类中静态成原创 2022-12-07 17:59:15 · 3698 阅读 · 0 评论 -
c与c++的struct区别
看了一些文章,总结了大概这四点,实际上是三点,两外一点说的是C++中的struct和class的区别,C++中struct是抽象数据类型(ADT),可以将struct当成类来处理,可以包含类的所有东西,比如构造函数、析构函数、友元等,可以继承也可以实现多态,只是因为有了class一般不用。C语言中:struct是用户自定义数据类型(UDT),C语言struct不是类,不可以有函数,没有权限设置也不能使用类的特征例如public等关键字,是一些变量的集合体,可以封装数据却不可以隐藏数据。原创 2022-12-07 16:26:23 · 779 阅读 · 0 评论 -
C/C++中的static关键字详细解析
1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。2.static的第二个作用是保持变量内容的持久。(static变量中的记忆功能和全局生存期)存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。原创 2022-12-07 14:07:23 · 164 阅读 · 0 评论 -
C/C++中指针与引用详细说明
指针是存放内存地址的一种变量,特殊的地方就在它存放的是内存地址。因此,指针的大小不会像其他变量一样变化,只跟当前平台相关——不同平台内存地址的范围是不一样的,32位平台下,内存最大为4GB,因此只需要32bit就可以存下,所以sizeof(pointer)的大小是4字节。64位平台下,32位就不够用了,要想内存地址能够都一一表示,就需要64bit(但是目前应该没有这么大的内存吧?),因此sizeof(pointer)是8。引用的本质是“变量的别名”,就是给变量又重新起了一个名字,既然是“别名”,那么就一定原创 2022-12-06 17:41:24 · 262 阅读 · 0 评论 -
Go与C/C++中的堆和栈比较
首先我们确定一点不管是Go还是C/C++都有堆和栈的概念,我们今天说的是它们到底有何不同,有什么区别。C/C++中提及的“程序堆栈”本质上其实是操作系统层级的概念;+ 它通过C/C++语言的编译器和所在环境来共同决定;+ 在程序启动时,操作系统会自动维护一个所启动程序消耗内存的地址空间,并自动将这个空间从逻辑上划分为堆内存空间和栈内存空间。这时,“栈”的概念是指程序运行时自动获得的一小块内存,而后续的函数调用所消耗的栈大小,会在编译期间由编译器决定,用于存储局部变量或者保存函数调用栈;原创 2022-12-04 23:12:02 · 391 阅读 · 0 评论 -
C++中类的友元函数和友元类详解
类的友元函数是定义类外部,但是有权限访问类的所有私有(private)成员和保护(protected)成员。友元函数并不是类成员函数。友元可以是一个函数,也可以是一个类,我们称之为友元类,整个类及其所有成员都是友元。我们通过一个例子来认识友元函数:1.2 友元类友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员),友元类固然好用,但是它打破了面向对象的封装特性。我建议尽量不要用或者少用。我们举例说明一下:main.cpp2.说明友元函数是类外函数,声原创 2022-12-03 22:42:07 · 799 阅读 · 0 评论 -
C++中多态使用详细讲解
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。多态就是同一个行为具有多个不同表现形式或形态的能力,指的就是行为的多态。比如动物的爬行行为,小狗老虎,兔子它们各自的爬行方式是不同的,再比如草本植物都有自己的药物功能,他们所对应的药物功能不一样。原创 2022-12-01 13:03:18 · 1121 阅读 · 0 评论 -
C++中的泛型详细讲解
它是一种泛化的编程方式,其实现原理为程序员编写一个函数/类的代码示例,让编译器去填补出不同的函数实现。允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。函数模板的声明和定义要放在一个头文件中。在部分使用场景,会使用.hpp来表示这个头文件是包含了函数定义的(即.h和.cpp的集合体)。需要注意,这并不是一个硬性要求,你也可以直接使用.h,并将声明和定义放入其中。因为单独的.h。原创 2022-11-30 00:35:47 · 5578 阅读 · 0 评论 -
C++中的内联函数用法
内联函数并不是一个增强性能的灵丹妙药。只有当函数非常短小的时候它才能得到我们想要的效果;但是,如果函数并不是很短而且在很多地方都被调用的话,那么将会使得可执行体的体积增大。最令人烦恼的还是当编译器拒绝内联的时候。在老的实现中,结果很不尽人意,虽然在新的实现中有很大的改善,但是仍然还是不那么完善的。一些编译器能够足够的聪明来指出哪些函数可以内联哪些不能,但是大多数编译器就不那么聪明了,因此这就需要我们的经验来判断。如果内联函数不能增强性能,就避免使用它!原创 2022-11-29 16:36:34 · 651 阅读 · 0 评论 -
C++ 空类中有哪些成员函数
赋值函数是把一个新的对象赋值给一个原有的对象,所以如果原来的对象中有内存分配先要把内存释放掉,而且要检查一下两个对象是否为同一个对象,如果是不做任何操作,直接返回。通常,如果一个类中包含指向动态分配存储空间的指针类型的成员变量时,就应该为这个类设计一个拷贝构造函数,除了需要设计一个拷贝构造函数之外,还需要为它添加一个赋值操作符重载函数。拷贝构造函数是一个对象初始化一块内存区域,这块内存就是新对象的内存区,赋值运算符是对于一个已经初始化的对象来进行赋值操作。对象存在,用别的对象来给它赋值,就是赋值函数;原创 2022-11-28 22:58:39 · 2190 阅读 · 0 评论 -
C++ 模版类和模板函数介绍及使用
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。template 函数返回类型 类名::函数名(参数列表){函数体},比如有两个模板形参T1,T2的类A中含有一个void h()函数,则定义该函数的语法为:注意:当在类外面定义类的成员时template后面的模板形参应与要定义的类的模板形参一致。原创 2022-11-15 17:11:40 · 2202 阅读 · 0 评论 -
C++通过Makefile定义宏参数,传入程序
严格来说应该是通过C++编译工具g++ -D 参数传递宏参数,下面我们来一起操作起来。原创 2022-10-21 13:39:56 · 791 阅读 · 0 评论