C/C++关键知识点汇总
文章平均质量分 55
我的C/C++关键知识点汇总,含算法和数据结构
利白
这个作者很懒,什么都没留下…
展开
-
C++动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?
比如debug的exe调用release编译生成的dll的函数,参数如果使用stdvector或者stdstring之类的东西,肯定会崩。含有stl的debug动态库和release动态库在项目中不能混用,debug项目必须用debug库,release项目必须用release库;,会分别生成debug和release的dll,在exe中必须要引用指定版本的dll,不能混用,否则会出错;只提供给用户release的dll,用户的debug版和release版的exe都可以引用此dll。...........原创 2022-07-21 22:29:13 · 5996 阅读 · 0 评论 -
由C到汇编系列(2),深入理解《hello world》是如何实现的
函数栈桢的创建和销毁前言C语言是由函数构成的栈帧概念寄存器hello world是如何实现我们转到汇编代码???? main函数栈帧的创建(开始调用main函数)???? main函数栈帧的初始化????函数栈帧的销毁printf函数栈帧的销毁main函数的栈帧销毁总结❤️ :热爱编程学习,期待一起交流。 ????:博主是河牧院大一在读学生,水平有限,如发现错误,期待指点!(2466200050)????:以下是我对main函数栈帧的创建与销毁一些拙见,期待大佬们指教。前言转载 2021-12-01 10:58:10 · 381 阅读 · 2 评论 -
C++ STL是否会产生内存碎片?
问:C++ STL是否会产生内存碎片?答:vector是顺序存储的,不会生产内存碎片;但是list和map是非连续存储的,会产生内存碎片。原创 2021-02-10 20:28:11 · 1133 阅读 · 0 评论 -
C++常用类型转换(在Unicode和MBCS之间相互转换函数)
1、C++在Unicode和MBCS之间相互转换函数BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize){ DWORD dwMinSize; dwMinSize = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0); ...原创 2020-04-01 09:12:29 · 603 阅读 · 0 评论 -
派生类的构造函数的初始化列表问题,Widget::Widget(QWidget *parent) :QWidget(parent)
该如何理解下面段代码的第二行QWidget(parent)?Widget::Widget(QWidget *parent) : QWidget(parent),//???? ui(new Ui::Widget){ ui->setupUi(this);}一、派生类不能在成员初始化列表中直接初始化基类的成员初始化基类成员构造函数是不可继承的。因此......原创 2014-02-20 17:47:50 · 18039 阅读 · 2 评论 -
C++内存分配/删除/泄露/单例模式等相关面试题
https://blog.csdn.net/Damn_Yang/article/details/838236011.malloc/free和new/delete的区别2.请设计一个类,该类只能在堆上创建对象3.请设计一个类,该类只能在栈上创建对象4.单例模式(这个在面试中经常出现)5.内存泄漏1.malloc/free和new/delete的区别malloc/free和ne......转载 2019-01-08 15:57:19 · 738 阅读 · 0 评论 -
C++类内存分布,重点关注含虚函数的情况
生成的是子类的对象,在构造时,子类对象的虚指针指向的是子类的虚表,接着由Derived*到Base*的转换并没有改变虚表指针,所以这时候p->VirtualFunction,实际上是p->vfptr->VirtualFunction,它在构造的时候就已经指向了子类的VirtualFunction,所以调用的是子类的虚函数,这就是多态了。同样,当创建子类的对象时,编译器在构造函数里将虚表指针(子类只有一个虚表指针,它来自父类)指向子类的虚表(这个虚表里面的虚函数入口地址是子类的)。转载 2019-01-06 16:59:59 · 316 阅读 · 0 评论 -
struct结构体字节对齐原则及为什么要对齐?
http://blog.sina.com.cn/s/blog_14ecf1a5b0102x27j.htmlhttps://blog.csdn.net/zhanghow/article/details/55262988//--------------------------------------------------------本文目录结构|-为什么结构体内存对齐|-结构体内...转载 2019-01-06 11:30:21 · 27248 阅读 · 8 评论 -
由C到汇编系列(1)一个程序从开始运行到结束的完整过程
http://www.cnblogs.com/xidian2014/p/8504580.html源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,源程序就是所写好的代码。可执行程序,即常说的.exe程序,可以执行程序,完成计算机功能。在C语言中,.c文件就是所谓的源文件。源程序到可执行程序的过程。在这个过程中,会发生如下的变化:.c文件生成.obj文件...转载 2019-01-06 10:45:25 · 5525 阅读 · 2 评论 -
计算下面几个C++类的大小
一、计算下面几个C++类的大小class A {};: sizeof(A) = 1;class A { virtual Fun(){} };: sizeof(A) = 4class A { static int a; };: sizeof(A) = 1;class A { int a; };: sizeof(A) = 4;class A { static int a; int ...原创 2019-01-04 18:22:03 · 423 阅读 · 0 评论 -
什么情况下会调用拷贝构造函数?
调用拷贝构造函数的情形:1)用类的一个对象去初始化另一个对象的时候 2)当函数的参数是类的对象时,就是值传递的时候,如果是引用传递则不会调用 3)当函数的返回值是类的对象或者引用的时候 ...原创 2019-01-03 11:38:59 · 4457 阅读 · 0 评论 -
构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
1、构造函数不能声明为虚函数1)因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了2、析构函...原创 2019-01-03 11:29:10 · 6614 阅读 · 1 评论 -
memcpy、strcpy、memset的实现
https://www.cnblogs.com/cpsmile/p/4426028.htmlmemmove、memcpy、strcpy、memset原型为:void *memmove( void* dest, const void* src, size_t count );char* strcpy(char* dest, const char* src);void *memcp...转载 2019-01-02 10:56:49 · 315 阅读 · 0 评论 -
C++中的单例模式(懒汉、饿汉)
https://blog.csdn.net/king457757706/article/details/51887611最近写代码因为疏忽单例的判断,导致程序快速切换多次启动时出现了bug ,借这个机会梳理一下几种单例模式的构造方式。单例模式存在的意义是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。解决方法1(懒汉式)一种实现方法是定义一个单例类,使用类...转载 2018-08-28 09:39:19 · 1436 阅读 · 1 评论 -
设计一个只能在堆上或栈上实例化的类
http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621827.html一道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类只能在堆内存上实例化的类:将析构函数定义为private,在栈上不能自动调用析构函数,只能手动调用。也可以将构造函数定义为private,但这样需要手动写一个函数实现对象的构造。只...转载 2019-01-02 10:08:05 · 239 阅读 · 0 评论 -
C++构造函数和析构函数中可以调用虚函数吗?
不能。这个问题来自于《Effective C++》条款9:永远不要在构造函数或析构函数中调用虚函数 。简要结论: 1. 从语法上讲,调用完全没有问题。 2. 但是从效果上看,往往不能达到需要的目的。 Effective 的解释是: 派生类对象构造期间进入基类的构造函数时,对象类型变成了基类类型,而不是派生类类型。 同样,进入基类析构函数时,对象也是基类类型。 详情参考:ht...原创 2018-12-29 16:39:48 · 8196 阅读 · 0 评论 -
C++类的公有/私有继承,基类的私有成员在派生类中访问情况
首先,基类的私有成员是会被派生类继承的,但是不能被派生类访问;从物理上讲是复制过来了,在内存中确实有复制。但是从程序上看是被屏蔽了,不能直接调用。其次,对于基类public类型的成员变量,无论是公有继承还是私有继承,都可以直接在派生类中定义的成员函数直接访问。对于基类private类型的成员变量,无论是公有继承还是私有继承,在派生类中定义的成员函数都不能直接访问基类的私有成员,只能通过基类的...原创 2018-12-29 10:58:09 · 23004 阅读 · 3 评论 -
const string& other 可以访问私有变量?
在文章https://blog.csdn.net/libaineu2004/article/details/81333544中,我发现://拷贝构造函数String::String(const String &other){ //输入参数为const型 int length=strlen(other.m_data);为什么 other 可以访问私有变量?因为:访...原创 2018-12-29 10:43:17 · 1020 阅读 · 0 评论 -
轻松记住大端小端的含义(附对大端和小端的解释)
https://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html或许你曾经仔细了解过什么是大端小端,也动手编写了测试手头上的机器上是大端还是小端的程序,甚至还编写了大端小端转换程序;但过了一段时间之后,当你再看到大端和小端这两个字眼,你的脑中很快浮起了自己曾经做过的工作,却总是想不起究竟哪种是大端、哪种是小端,然后又去查以前...转载 2018-12-28 17:18:21 · 790 阅读 · 1 评论 -
C++后端开发面试题
C++后端开发面试题转载来自:https://github.com/chankeh/cpp-backend-reference#后端开发面试知识点大纲:##语言类(C++):###关键字作用解释:volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新...转载 2018-12-13 10:36:46 · 1373 阅读 · 2 评论 -
好教程推荐系列:收藏的C++技术面试 -- 24K纯技术干货(解答)
https://blog.csdn.net/shanghairuoxiao/article/details/72876248C和C++语言基础参考书籍:《C++ primer》,《effective C++》,《STL源码解析》,《深度搜索C++对象模型》extern关键字作用extern声明变量在在外部定义?extern修饰函数?extern C的作用?用法?static关键...原创 2018-12-12 12:08:40 · 467 阅读 · 0 评论 -
好教程推荐系列:收藏的C++技术面试 -- 24K纯技术干货(题目)
作者:Oscarwin链接:https://www.zhihu.com/question/34574154/answer/253165162来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。今年刚找完工作的应届生来答一发,校招主要考察基础和思维,主要涉及C++语言基础,数据结构与算法,TCP/IP协议,网络编程,Linux。虽然面试技巧和心态也很重要,...原创 2018-12-12 12:04:50 · 750 阅读 · 0 评论 -
Linux服务器百度携程面试
一. 百度一面1、给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 01 概率一样。2、10 亿个 url,每个 url 大小小于 56B,要求去重,内存 4G。3、把一个 bst 转化成一个双向链表。4、http 和 https 区别,https 在请求时额外的过程,https 是如何保证数据安全的;5、IP 地址子网划分;6、POST 和 GET 区...原创 2018-02-22 12:27:33 · 1147 阅读 · 0 评论 -
从面试失败开始说起 -- 面试成功必备,C++ 后台开发面试时一般考察什么?
转载来源:https://mp.weixin.qq.com/s/WhNogMfwRdQzPyLFH6_okghttps://zhuanlan.zhihu.com/p/50247385今天晚上“高性能服务器开发”QQ群(群号:49114021,有兴趣的读者可以加一下)里面一名叫“成都-go-戒炸鸡”的群友提出了他最近面试的一些面试题,面试题内容个人觉得非常典型、也非常有代表性和针对性,故...转载 2018-11-30 17:56:46 · 810 阅读 · 0 评论 -
去BAT,你应该要看一看的面试经验总结
https://www.cnblogs.com/balloonwj/p/9093631.html我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的。先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理。我本人也是上几家公司的面试官,因为接下来几年面临着成家,技术上也到了瓶颈期,虽然拿了不少offer,但是...转载 2018-11-30 17:53:20 · 698 阅读 · 0 评论 -
数据结构分析-----TAILQ_QUEUE队列
https://blog.csdn.net/luotuo44/article/details/38374009 Libevent源码中有一个queue.h文件,位于compat/sys目录下。该文件里面定义了5个数据结构,其中TAILQ_QUEUE是使得最广泛的。本文就说一下这个数据结构。队列结构体: TAILQ_QUEUE由下面两个结构体一起配合工作。#define ...转载 2018-12-01 10:43:39 · 758 阅读 · 0 评论 -
map和hash_map的区别
1、STL的map底层是用红黑树(RB Tree)实现的,查找时间复杂度是log(n),而hash_map底层是用hash表存储的,查询时间复杂度是O(1)2、hash_map比map查找速度更快。3、linux c的使用方法#include <map> //mapusing namespace std;//make_pair需要#include <hash_map>usi...原创 2018-02-27 17:23:57 · 1591 阅读 · 0 评论 -
C函数和C++函数相互调用的问题,extern “C“(★firecat推荐★)
http://blog.csdn.net/xiexingshishu/article/details/40679403http://it.zuocheng.net/c-cpp-mix-programe1、如何C++程序要调用 已编译后的C函数,该怎么办?(1)假设某个C函数的声明如下:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生...转载 2018-02-08 09:19:26 · 1889 阅读 · 0 评论 -
关于栈和堆的定量分析(★firecat推荐★)
文章来源:http://blog.csdn.net/bigbug_zju/article/details/39525281计算机系统中的堆和栈是跟程序员最密切的两个概念。如果没有栈和堆的概念,下面程序的错误就不知道其所以然。[cpp] view plaincopy#include int main(int argc, ch转载 2014-10-21 17:01:01 · 914 阅读 · 0 评论 -
一个进程(Process)最多可以生成多少个线程(Thread),★firecat推荐★
一、Windows版本文章来源:http://blog.csdn.net/great3779/article/details/59301901.进程中创建线程的限制默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 [cpp] v...转载 2014-10-23 15:55:18 · 5348 阅读 · 0 评论 -
我个人整理的C++单例模式,推荐boost方式(★firecat推荐★)
// C++单例模式测试程序//#include "stdafx.h"#include <iostream>using namespace std;class CSingleton{private:CSingleton(){;}//单例模式,禁止外部实例化public://获取静态对象指针static CSingleton *getInstance...原创 2015-09-21 19:23:58 · 1635 阅读 · 0 评论 -
C++实现线程安全的单例模式(★firecat推荐★)
http://www.cnblogs.com/myd620/p/6133420.html在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。首先给出饿汉模式的实现template <class T>class singleton{protected: singleton(){};private: singleton...转载 2018-03-26 11:11:09 · 1108 阅读 · 0 评论 -
C++ new失败的处理
C++ new失败的处理http://book.51cto.com/art/201202/317549.htm 编码质量150建议总体分两个部分,一个是:http://hi.baidu.com/bellgrade/item/179ff5374b74eef6e7bb7aa6 写的比较容易理解。另一个是 http://book.51cto.com/art/201202/317767.h...转载 2018-08-01 14:42:35 · 1041 阅读 · 0 评论 -
两道腾讯的面试真题,考验C++对象模型的理解
1、原题如下:#include <iostream>using namespace std;class Test{public: static int getA(); int getB(); virtual int getC(); int a; static int c;};int Test::getA(){ r...原创 2018-08-01 15:43:05 · 845 阅读 · 0 评论 -
详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数
C++默认的拷贝构造函数和赋值构造函数都是浅拷贝,所以当遇到类成员含有指针变量时,就得自己实现深拷贝!~String();原创 2018-08-01 16:42:37 · 10433 阅读 · 3 评论 -
Tars C++版本的编译及相关教程
前言,什么是tars?https://github.com/TarsCloud/Tars/blob/master/Introduction.mdhttps://github.com/TarsCloud/Tars/blob/master/Install.zh.md 1、环境准备CentOS7,CMake编译器(1)先安装mysql servercentos7安装mysql...原创 2018-10-19 10:00:34 · 2380 阅读 · 1 评论 -
一步一图一代码,一定要让你真正彻底明白红黑树
https://blog.csdn.net/v_JULY_v/article/details/6124989红黑树专题:https://blog.csdn.net/v_JULY_v/article/category/774945https://www.julyedu.com/转载 2018-11-28 11:01:27 · 455 阅读 · 0 评论 -
C++异步调用利器future/promise实现原理
https://blog.csdn.net/jiange_zh/article/details/52542084前言在异步编程中,各种回调将让人眼花缭乱,代码分散,维护起来十分困难。boost和C++11 的 future/promise 提供了一个很好的解决方案,使得代码更加漂亮、易维护。在工作中,我也用过几次future/promise,但是还是十分生疏,所以决定学习下它的原理,用起...转载 2018-11-24 17:10:39 · 1721 阅读 · 0 评论