51CTO首页
AI.x社区
博客
学堂
精品班
软考社区
免费课
企业培训
鸿蒙开发者社区
WOT技术大会
IT证书
公众号矩阵
移动端
短视频
免费课程
课程排行
直播课
软考学堂
全部课程
厂商认证
IT技术
24年11月软考
PMP项目管理
免费题库
在线学习
文章
资源
问答
课堂
专栏
直播
51CTO
鸿蒙开发者社区
51CTO技术栈
51CTO官微
51CTO学堂
51CTO博客
CTO训练营
鸿蒙开发者社区订阅号
51CTO软考
51CTO学堂APP
51CTO学堂企业版APP
鸿蒙开发者社区视频号
51CTO软考题库
鸿蒙开发者社区
首页
帖子
问答
资源
课堂
直播
发现
登录/注册
51CTO
中国优质的IT技术网站
51CTO博客
专业IT技术创作平台
51CTO学堂
IT职业在线教育平台
活动
短视频
专栏
极客Show
鸿蒙技术特刊
我的关注
全部帖子
操作系统
OpenHarmony
HarmonyOS
其他
应用开发
卡片开发
三方库
IDE
其他
设备开发
海思开发板
树莓派
其他
框架语言
C/C++
Java
JavaScript
ArkUI / eTS
其他
其他
物联网
云原生
数据库
操作系统
大数据
人工智能
开发语言
其他
社区版务
社区公告
社区生活
意见反馈
社区规则
社区活动
默认
发布时间
热度
原创
精华
热门标签
OpenHarmony
dayu
鸿蒙
手把手教你写数独计算器(1)
最近在一个数独网站玩数独游戏。由于自己数独能力不是特别强,解题比较慢,但是自己是程序猿,所以,我想,自己写个数独计算器吧,让电脑帮我去算得了。由于我是C++程序猿,所以第一步要做的是,先不管界面,做一个黑底白字的win32控制台应用程序,用于验证自己的算法。好了,开工,所以做一个简单的儿童4阶数独,如图:我程序是这样使用的,首先,在程序的同目录下放一个input.txt文件用于输入,其中,未知数用0表示,每个数之...
蓝月亮
0回复
1.3w浏览
数独
算法
源码分析 shared_ptr 实现
智能指针是C++中一项很常用的技术,合理的使用智能指针可以更方便的管理内存,降低内存泄漏的风险,这里只介绍C++11后官方的智能指针。智能指针的种类uniqueptrsharedptrweakptr关于智能指针使用以及区别可以自行查找资料,这里主要介绍智能指针的实现原理。sharedptr的实现我们平时看文档都知道sharedptr内部是使用引用计数来记录托管指针被引用的次数,当托管指针的引用计数为0时会释放托管的内存,这里通过gcc源码探究shared...
蓝月亮
0回复
1.2w浏览
c++
C++ 赋值运算符‘=‘的重载(浅拷贝、深拷贝)
01赋值运算符重载的需求有时候希望赋值运算符两边的类型可以不匹配,比如:把一个int类型变量赋值给一个Complex(复数)对象,或把一个char类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符‘’。需要注意的是:赋值运算符只能重载为成员函数。02赋值运算符重载的例子下面我们以自定义一个自己的字符串类代码的例子,讲解赋值运算符的重载函数。classMyString字符串类{public:构造函数,默认初始化1个字...
蓝月亮
0回复
1.7w浏览
深拷贝和浅拷贝
C++ 模板常见特性(函数模板、类模板)
背景C++是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量。C++提高代码的可重用性主要有两方面:继承模板继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的特性。使用「模板」的特性设计,实际上也就是「泛型」程序设计。函数模板01变量交换函数模板假设我们设计一个交换两个整型变量的值的函数,代码如下:交换两个整型变量的值的Swap函数:voidSwap(int&x,int&y){inttmpx;xy;ytmp;}如果是...
蓝月亮
0回复
1.1w浏览
模板方法
C++:两百字三段代码解决函数返回局部变量问题
C++:两百字三段代码解决函数返回局部变量问题不可返回指向栈内存的局部变量。可返回指向堆区和常量区的局部变量。(选)调用函数步骤:先入栈参数和局部变量执行函数将返回值保存至一个区域出栈函数的局部变量和参数将返回值拷贝至主函数的接受值。函数不可返回指向栈内存的局部变量,但可返回指向堆和常量区的。那么什么是栈,堆以及常量区呢?它们中存放的是什么数据?它们储存的数据什么时候释放?一、栈、堆和常量区(重要...
蓝月亮
0回复
1.5w浏览
函数栈调用
返回局部变量
让类 / 进程 / 脚本「单身」的方法
前言有某些场景下,我们不希望有多个相同的Linux进程或Shell脚本同时执行,因为相同进程同时执行,可能会破坏数据的一致性。当然还有在C++代码里,有时希望系统保证系统中一个类只有一个实例,并提供一个访问它的全局访问点,也就是所谓的「单例模式」。只有一个实例很重要,比如一个打印机可以有多个打印任务,但是只有一个正在工作的任务,一个系统只能有一个窗口管理器或文件系统。接下来,简单介绍下:Linux命令的方式控制...
蓝月亮
0回复
1.0w浏览
设计模式
单例模式
C++ 运算符重载的基本概念
01运算符重载的需求C++预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型等等,且不能用于对象的运算。但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符,使得运算符能用于对象之间的运算。比如,在数学上,两个复数可以直接进行+、等运算,但在C++中,直接将+或用于复数对象是不允许的。有时会希望,让对象也能通过运算符进行运算。这样代码就更简洁,也容易理解。例如:compl...
蓝月亮
0回复
8911浏览
运算符重载
c++11 新特性之列表初始化
C++11新增了列表初始化的概念。在C++11中可以直接在变量名后面加上初始化列表来进行对象的初始化。structA{public:A(int){}private:A(constA&){}};intmain(){Aa(123);Ab123;errorAc{123};Ad{123};c++11inte{123};intf{123};c++11return0;}列表初始化也可以用在函数的返回值上std::vector<int>func(){return{};}列表初始化的一些规则:首先说下聚合类型可以进行直接列表初始化,这里需要了解什么是聚合类型:类型是一个普通数组...
蓝月亮
0回复
1.4w浏览
列表初始化
new[] 和 delete[] 为何要配对使用?
在C++中,我们都知道,new和delete及new[]和delete[]需要配对使用,为什么一定要配对使用呢?在C++中,“new”关键字用于在堆内存上创建对象,“new[]”用于在堆内存上创建对象数组。在平时资料中,我们常看到:new和delete,new[]和delete[]一定要配对使用!也有人说:有时候不配对使用也不会出现问题。今天,我来给大家讲下:“new[]和delete[]为何要配对使用?”首先,让我们来看下这段配对使用代码:include<stdlib.h>inclu...
蓝月亮
0回复
1.0w浏览
new[]和delete[]
C++11 的类型推导详解
auto&decltype关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decltype关键字,使用他们可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。autoauto可以让编译器在编译器就推导出变量的类型,话不多说上代码:autoa10;10是int型,可以自动推导出a是intinti10;autobi;b是int型autod2.0;d是double型这就是auto的基本用法,可以通过右边的类型推导出变量的类型。auto推导规则直接看代码代码1...
蓝月亮
0回复
1.0w浏览
类型推导
C++ 互斥锁和条件变量的性能比较
介绍本文以最简单生产者消费者模型,通过运行程序,观察该进程的cpu使用率,来对比使用互斥锁和互斥锁+条件变量的性能比较。本例子的生产者消费者模型,1个生产者,5个消费者。生产者线程往队列里放入数据,5个消费者线程从队列取数据,取数据前需要判断一下队列中是否有数据,这个队列是全局队列,是线程间共享的数据,所以需要使用互斥锁进行保护。即生产者在往队列里放入数据时,其余消费者不能取,反之亦然。互斥锁实现的代...
蓝月亮
0回复
1.6w浏览
互斥锁
条件变量
什么时候使用 volatile 关键字?
想必大家平时都见过volatile关键字,可是你知道什么时候需要使用volatile关键字吗?直接看下面代码:inta100;while(a100){code}这段程序编译时,如果编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。这里为了产生预期的行为,需要阻止编译器...
蓝月亮
0回复
1.1w浏览
volatile
关于 GDB 你需要知道的技巧
gdb基本上是每个unix环境开发者都会使用的调试工具,使用gdb基本上可以按照自己的需求随心所欲的运行程序,可让被调试的程序在自己所指定的断点处停住,同时可以检查程序当前的状态,检查各种变量及寄存器的值,也可以动态的改变程序的执行环境。本期纯干货,无废话,准备好开始咯gdb调试的三种方法gdbfilename:run开始、quit结束gdbattachpid:程序已经运行后,可使用attach跟踪进程,attach目标进程后,调试器会暂停下来,需...
蓝月亮
0回复
1.8w浏览
gdb
c++11 新特性之 std::function 和 lambda 表达式
c++11新增了std::function、std::bind、lambda表达式等封装使函数调用更加方便。std::function讲std::function前首先需要了解下什么是可调用对象满足以下条件之一就可称为可调用对象:是一个函数指针是一个具有operator()成员函数的类对象(传说中的仿函数),lambda表达式是一个可被转换为函数指针的类对象是一个类成员(函数)指针bind表达式或其它函数对象而std::function就是上面这种可调用对象的封装器,可以把std::function看...
蓝月亮
0回复
2.1w浏览
c++11
c++11 新特性之线程相关所有知识点
c++11关于并发引入了好多好东西,这里按照如下顺序介绍:std::thread相关std::mutex相关std::lock相关std::atomic相关std::callonce相关volatile相关std::conditionvariable相关std::future相关async相关std::thread相关c++11之前你可能使用pthreadxxx来创建线程,繁琐且不易读,c++11引入了std::thread来创建线程,支持对线程join或者detach。直接看代码:include<iostream>include<thread>usingnamespacestd;intmain(){autofu...
蓝月亮
0回复
8850浏览
线程
C++ 一篇搞懂多态的实现原理
虚函数和多态01虚函数在类的定义中,前面有virtual关键字的成员函数称为虚函数;virtual关键字只用在类定义里的函数声明中,写函数体时不用。classBase{virtualintFun();虚函数};intBase::Fun()virtual字段不用在函数体时定义{}02多态的表现形式一「派生类的指针」可以赋给「基类指针」;通过基类指针调用基类和派生类中的同名「虚函数」时:1.若该指针指向一个基类的对象,那么被调用是基类的虚函数;2.若该指针指向一个派生类...
蓝月亮
0回复
1.4w浏览
封装、继承、多态
c++ 代码整洁之道
整洁的代码在团队中无疑是很受欢迎的,可以高效的被其它成员理解和维护,本文参考《C++代码整洁之道》和《GoogleC++编码规范》,结合自己的一些想法整理如下:C++本身作为面向对象语言,首先介绍下面向对象一般涉及到的开发原则。面向对象开发原则依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体,抽象(稳定)不应依赖于实现细节(变化),实现细节应该依赖于抽象,因为稳定态如果依赖于变化态则会变成不稳定态。开放封闭原...
蓝月亮
0回复
1.5w浏览
代码整洁
JavaScript 常量真的不可变吗?
JavaScript中的常量究竟如何工作,常量就是“在正常执行中无法被程序改变的值”吗?事实就是如此吗?非也,本文将给你答案。前几天我在Twitter上谈到了JavaScript中的const。KyleSimpson指出我之前分享的一篇文章中有关于const的一个误解。但我的想法是,至少我能理解这种糊涂来自哪里,因为const与我预想的工作方式不太一样(注,我并不是说const是错的,只是说它与我的预想有差别。)虽然我跟KyleSimpson对话很短,但是这段对...
baby_030
0回复
7857浏览
javascript
彻底弄懂 C++11 右值引用 | 技术总结
移动语义主要解决std::uniqueptr所有权转移的问题,同时可以避免先拷贝再释放资源的问题。右值引用是用来配合移动语义,实现移动构造函数和移动赋值函数功能。Datadata;Data&&data2Data{};OKData&&data2std::move(data);OK特别需要注意的是返回右值引用变量时,需要使用std::move()std::forward()显式的移动转发或完美转发(针对不同左右值参数的转发),将变量“还原”为右值(右值引用类型)。std::move()只转发为右值引用类...
蓝月亮
0回复
1.8w浏览
右值引用
如何通过调试学习 nginx ?
我是张小方,公众号「高性能服务器开发」,前携程旅行网技术专家组专家,擅长高性能服务器的开发!在实际的应用中,有一类应用会通过Linux函数fork出新的子进程。以nginx为例,nginx对客户端的连接是采用多进程模型,当nginx接受客户端连接后,创建一个新的进程来处理该连接上的信息来往。新产生的进程与原进程互为父子关系。那么如何用gdb调试这样父子进程呢?一般有两种方法:方法一用gdb先调试父进程,等子进程被fork出来后...
蓝月亮
0回复
1.0w浏览
nginx
暂无内容
1
209
210
211
212
213
214
215
216
217
218
精选
客服
订阅鸿蒙技术特刊,精选内容抢先看
微信扫码关注,即刻订阅