hik_老鬼
码龄7年
关注
提问 私信
  • 博客:54,821
    54,821
    总访问量
  • 23
    原创
  • 1,537,184
    排名
  • 8
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2017-10-18
博客简介:

great_emperor_的博客

查看详细资料
个人成就
  • 获得46次点赞
  • 内容获得2次评论
  • 获得133次收藏
创作历程
  • 23篇
    2022年
成就勋章
兴趣领域 设置
  • 数据结构与算法
    排序算法
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++ 高效编程:函数返回值避免reference与pointer案例

pass-by-value传值时会多调用了一次拷贝构造函数与析构函数,且当形参为非基本类型时,也将在栈区开辟更多的空间。因此,当定义的函数需要返回对象时,大部分人可能会想到以reference或pointer作为函数返回值,为了防止出错,以下几种情况不能作为函数返回值:1.函数内部使用new开辟的空间的reference:当被返回的函数的reference是函数内部使用new开辟的空间时,可能造成这个引用所指向的自由存储区无法释放的情况(由于外部没有具体的变量名,故无法用delete手动释放该内存),从
原创
发布博客 2022.03.14 ·
4036 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++ 高效编程:pass-by-value(值传递)与pass-by-reference(引用传递)

C++在定义函数传参时,常用pass-by-value(值传递)与pass-by-reference(引用传递)两种形式,两种参数传递具体实现方式为:值传递(pass-by-value)值传递(passl-by-value)过程中,在堆栈中开辟了形参内存空间,并调用拷贝构造函数把实参值复制给形参,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值,且实参到形参传值过程中调用了拷贝构造函数。例:#include <i
原创
发布博客 2022.03.14 ·
3364 阅读 ·
3 点赞 ·
0 评论 ·
7 收藏

C++ 高效编程:规范使用 == 判断符

在编程的过程中,经常会使用==与=两个符号,两符号不同于与数学运算符"=="与"=",在C++中,运算符“==”表示等一操作符,判断两边是否相等。利用相等运算符,如果希望相等运算符返回true,则运算符两侧的值或语句必须使相等的;如果不相等,则==运算符返回false。int c = 0;printf("%d
", c==2);运行输出0int c = 0;printf("%d
", c==0);运行输出1运算符“=”表示是赋值的意思,它的作用是将一个表达式(
原创
发布博客 2022.03.13 ·
9024 阅读 ·
3 点赞 ·
0 评论 ·
13 收藏

C++ 高效编码准则:1-7

目前,鉴于工作需求,为了提升自己的编码能力,与编码规范性。作者研究《Effective C++》一书,接下来将陆续做一些总结,与大家分享,供大家学习。1.C++语言已经是个多重范型的编程语言,C++语言可被看作一个语言联邦,四个次语言是:1)C;2)Object-Oriented C++;3)Template C++;4)STL。四个次语言进行高效编程时有各自的编程守则。2.少用define,尽可能使用const、enum、inline。宏定义实在预处理阶段被预处理器进行分析替换,宏定义的符号并不会
原创
发布博客 2022.03.06 ·
621 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++ 编译的四个过程:预处理阶段、编译阶段、汇编阶段、链接阶段

C++ 编译的四个过程
原创
发布博客 2022.03.04 ·
2053 阅读 ·
4 点赞 ·
0 评论 ·
7 收藏

C++ define 与inline浅析

define用define 定义的常量:没有类型的不进行类型安全检查,可能会产生意想不到的错误,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常量的名字联系起来,define 所定义的宏变量在预处理阶段的时候进行替换,在程序中使用到该常量的地方都要进行拷贝替换;用 define 可以定义一些简单的函数:宏替换只作替换,不做计算,不做表达式求解,不进行类型安全检查,会造成大量安全隐患。define定义简单函数隐患举例:输入变量不加括号#define SQUARE(X)
原创
发布博客 2022.03.04 ·
3473 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

C++ 自由存储区与堆

谈到自由存储区与堆的区别,就需要了解new与malloc的区别。实际上堆是C语言的关键术语,是操作系统所维护的一块特殊内存,它提供了动态分配的功能。用户使用malloc进行堆内存申请,使用free实现堆内存的释放。但自由存储区不同,它是C++中的一个抽象的概念。C++中规定使用new/delete申请和释放的的区域被称为自由存储区。因此,自由存储区的实际位置和new/delete申请/释放的位置有关。大部分编译器中new申请空间都是由malloc实现,默认是在堆上实现自由存储。但是用户也可以通过重载
原创
发布博客 2022.03.03 ·
1648 阅读 ·
3 点赞 ·
0 评论 ·
11 收藏

C++ 栈与堆详谈

栈和堆作为C++内存中的动态数据区,在程序执行过程中被动态的申请与释放,是C++内存管理中非常重要的环节。在程序执行过程中,堆和栈有不同的分工,两者的区别为: 栈 堆 编译器自动申请与释放 用户手动申请与释放 连续存储结构,不会造成内存碎片 链式存储结构,容易造成内存碎片 编辑器自动处理,不会造成内存泄漏 容易造成内存泄漏 由高
原创
发布博客 2022.03.03 ·
1353 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

C++ 内存管理:栈、堆、BSS、data、text

C++是一门追求极致性能的语言,合理的内存管理能够缔造出极致性能的代码,否则,不合理的内存管理,会成为日常隐患,产生一系列的BUG。Linux下操作系统程序地址空间的内存管理分布图如下所示:C++程序在执行时,内存区域主要可以分为四个部分:栈、堆、全局区(静态数据区)、代码段。栈区:由编译器自动开辟与释放,存放函数的参数值、局部变量等,栈区是由高地址位向低地址位增长,是一块连续的内存区域,一般最大尺寸为2M。堆区:由程序员使用malloc/free进行申请和释放,堆区是由低地址.
原创
发布博客 2022.03.03 ·
1434 阅读 ·
0 点赞 ·
0 评论 ·
7 收藏

C++类型转换:static_cast、reinterpreter_cast、dynamic_cast、const_cast

C++支持C语言的强制类型转换,并提供了四种应对各种的强制类型函数,以下对C++的强制类型转换做简单介绍。1.C语言风格强制类型转换TypenameB b;TypenameA a=(TypenameA)b;C语言风格类型强制转换存在较多安全隐患,例如:1)把一个指向 const 对象的指针转换成指向非 const 对象的指针;2)把一个指向基类对象的指针转换成指向一个派生类对象的指针;3)C 风格的转换不容易查找,他由一个括号加上一个标识符组成, 而这样的东西在 c++程序里一大
原创
发布博客 2022.03.01 ·
254 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++ extern“C“详谈

C++语言在编译的时候为了解决函数的多态问题,建立了与C语言编译器不同的函数名修饰规则,C++语言在编译的时候会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接阶段无法找到对应函数的情况。因此,C函数就需要用extern “C”进行链接指定,通知编译器以下函数或文件中函数是C语言函数,编译时按照C语言编译器的函数名修饰规则,保持函数的名称,不回生成用于链接的中间函数名。C语言编译器的函数名修饰规则对于__stdcall调用约定,编译器和链接...
原创
发布博客 2022.03.01 ·
147 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++ extern浅析

extern是外部声明关键字,字面意思就是声明某种变量或函数,在外部定义。extern声明变量的两种方法1.在其他文件中直接extern#include<iostream>#include<vector>using namespace std;extern int a ;int main() { cout << a << endl; return 0;}#include<iostream>#include"te
原创
发布博客 2022.02.28 ·
1078 阅读 ·
2 点赞 ·
1 评论 ·
2 收藏

C++ static关键字作用浅析

static作用改变被修饰变量或函数的作用范围与生命周期。全局变量static修饰全局变量时,在同一文件中被修饰的全局变量和普通全局变量的作用范围与生命周期没有区别,但被修饰的全局变量只能在定义的文件中可见,其他文件无法访问该变量。局部变量static修饰函数中的局部变量时,该变量不会因为所在函数执行结束而被释放。普通函数static修饰函数时,表明该函数只能在定义的文件中被调用。类数据成员static修饰类数据成员时,表明对该类所有对象这个数据成员都只有一个实例。即该实
原创
发布博客 2022.02.28 ·
264 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++ cin输入 不定长输入

C++ 不定长输入,保存进数组,并打印#include<iostream>#include<vector>using namespace std;int main() { vector<int> arr; int i; do { cin >> i; arr.emplace_back(i); } while (cin.get() != '
'); for (auto it = arr.begin(); it != arr.end
原创
发布博客 2022.02.28 ·
2014 阅读 ·
4 点赞 ·
0 评论 ·
7 收藏

C++ std 命名空间

std是一个命名空间,C++标准库中的标准函数与标准类都在std中定义,为了防止用户自定义函数或类与标准中命名冲突,使用标准库中需要限定命名空间。标准库调用#include<iostream>命名空间限定using namespace std;//或std::C++非标准库中不存在std类,调用函数时不需要使用std。非标准库调用#include<iostream.h>...
原创
发布博客 2022.02.28 ·
2121 阅读 ·
4 点赞 ·
0 评论 ·
4 收藏

C++ strcpy函数

函数功能把含有'\0'结束符的字符串复制到另一个地址空间。函数声明:char *strcpy(char* dest, const char *src);把以src为首地址NULL为结束符的数据复制到已dest开始的地址,但是,src与dest空间不能有重叠,且dest必须有足够的空间。C++提供strcpy此类函数,为了对指针操作更加安全,避免内存泄露等异常状态的发生。例如:char *p=new char[10];p="hello";delete p[];//此步释放时将报错❌
原创
发布博客 2022.02.28 ·
13548 阅读 ·
11 点赞 ·
1 评论 ·
65 收藏

C++ 空指针、野指针

空指针一个被赋值为0的指针,它不指向任何的对象或者函数。注意:指向内存编号为0的空间是空指针,当初始化指针变量,如果刚开始不知道指向那 就给他初始化指向0编号,但是空指针指向的内存是不可以访问(0到255之间是系统占用的内存用户不可以访问)。空指针定义int *p=nullptr;//C++int *p=NULL;//C用户对空指针进行操作时会引发异常,因此对指针进行操作时,要对指针进行非空判断if(p==nullptr){ return ;//指针为空时,直接返回,避免程
原创
发布博客 2022.02.28 ·
646 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

c++/c 数组与指针区别

数组 指针 保存数据 保存数据地址 直接访问数据 间接访问,首先获得数据的地址,然后从该地址中获得数据 通常数据数据数目固定,且数据元素类型相同 用于动态的数据结构 隐式的分配和删除内存 手动分配和删除内存,关键词:new、delete 自身即为数据名 指向匿名数据或函数 ...
原创
发布博客 2022.02.28 ·
287 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++ 引用与指针区别

1.引用是一个别名,指针是一个变量;变量中存储的数据是地址。2.对指向地址变量进行操作时,引用不需要解引用;指针需要解引用(加*)。3.引用定义时需要有明确指向,且指向一旦确定就不能改变;指针定义时指向可以为空,且中途指向可以改变。4.++运算意义不一样,引用名++:表示引用变量的值++;指针名++:表示指向地址++。同理,sizeof(引用)返回值是引用变量开辟的大小;sizeof(指针)返回值是指针变量本身的大小,与指针指向变量类型无关。5.引用只有一级;指针有多级。6.引用不能被c
原创
发布博客 2022.02.27 ·
335 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++ share_ptr 循环引用问题浅析

share_ptr指针涉及到循环引用问题会因为share_ptr指针对应的use_count()无法清0,导致内存泄露,直接上例子:class S_B;class S_A{public:  shared_ptr<S_B> m_b;}; class B{public:  shared_ptr<S_A> m_a;}; int main(){  while (true)  {    shared_ptr<S_A> S_a(new S_A)
原创
发布博客 2022.02.26 ·
5135 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏
加载更多