C/C++
nirvana · rebirth
NIRVANA & REBIRTH
展开
-
QT_信号与槽
使用创建一个信号和一个槽函数注意:两个参数需要一致,并且信号只写参数类型实现槽函数,在某个位置发送信号绑定信号和槽函数,程序才知道如何对应启动程序,查看结果原创 2021-05-11 11:45:34 · 151 阅读 · 0 评论 -
C/C++函数重载
为什么C语言不支持函数重载编译器在编译.c文件时,只会给函数进行简单的命名。具体方法是:给函数名之前加上 “_”所以两个函数名相同的函数在编译之后的函数名也相同C++中函数重载底层是如何处理的在.cpp文件中,虽然函数名一样,但是他们在符号表中生成的名称不一样?表示名称开始?后面是函数名@@YA表示参数表开始后面的字符分别表示:返回值类型、参数1类型、参数2类型…@Z表示名称结束由于在.cpp文件中,两个函数生成的符号表中名称不一样,所以可以编译通过。C++中是否能将原创 2020-07-17 13:37:24 · 448 阅读 · 0 评论 -
C++虚函数表地址偏移
#include <bits/stdc++.h>using namespace std;class Base {public: Base() { cout << "Base构造" << endl; } virtual ~Base() { cout << "Base虚析构" << endl; } virtual void f1() { cout << "Base::f1()" << endl;原创 2020-07-17 00:27:25 · 1257 阅读 · 1 评论 -
C/C++ 获取函数地址
CC语言中没有类的概念,只有普通的函数。通过函数名就可以得到函数地址#include <stdio.h>#include <stdlib.h>void fun() { }int main() { printf("%p\n", &fun);}对于 fun 和 &fun 应该这样理解:fun 是函数的首地址,它的类型是 void ()&fun 表示一个指向函数 fun 这个对象的地址, 它的类型是 void (*)()原创 2020-07-17 00:11:19 · 13357 阅读 · 1 评论 -
C++ 自由存储区和堆区
“free store” VS “heap”当我问你C++的内存布局时,你大概会回答:“在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。如果我接着问你自由存储区与堆有什么区别,你或许这样回答:“malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。”这样听起来似乎也没错,但如果我接着问:自由存储区与堆是两块不同的内存区域吗?它们有可能相同吗?你可能就懵了。事实上,网上看的很多博原创 2020-07-16 10:07:56 · 2547 阅读 · 0 评论 -
new/delete 与 malloc/free
1 使用malloc、freemalloc、freemalloc、free 为 CCC 的标准库函数,需要引入库 stdlib.h 或者 malloc.h(malloc.h 与 alloc.h一致),函数原型为:void* malloc(size_t size) //参数代表字节个数void free(void* pointer) //参数代表内存地址newnewnew、deletedeletedelete 则为 C++C++C++ 的操作运算符,它调用的分别为赋值运算符重载 opera原创 2020-07-13 23:45:13 · 255 阅读 · 0 评论 -
const在C和C++中的区别
在C中,const不是常量,只能说是一个不能改变的变量(注意是变量),C编译器不能把const看成看成一个编译期间的常量,因为他在内存中有分配,C编译器不知道他在编译期间的值。所以不能作为数组定义时的下标,因为它必须为常量。 在C中,const int a;是可以的,因为这只是声明一个变量,告诉编译器,我这里是声明,指明在别的地方有内存分配。但在C++中这样写是不正确的,C++中const默认是内部链接,C中默认是外部链接,为了起到和c语言一样的效果,C++需要将const修饰为extern,因为e原创 2020-07-13 17:58:23 · 381 阅读 · 0 评论