C++
文章平均质量分 70
C++ 学习记录
中国彭于晏杭州分晏
这个作者很懒,什么都没留下…
展开
-
【Modern C++】深入理解左值、右值
作为C++开发人员,相信我们都写过如下代码:在编译的时候,会提示如下:本文的主要内容如下图所示:在正式介绍左值和右值之前,我们先介绍下其历史。。表达式由按照语言规则排列的运算符,常量和变量组成。一个表达式可以包含一个或多个操作数,零个或多个运算符来计算值。每个表达式都会产生一些值,该值将在赋值运算符的帮助下分配给变量。在C/C++中,表达式有很多种,我们常见的有前后缀表达式、条件运算符表达式等。字面值(literal)和变量(variable)是最简单的表达式,也被认为是表达式。在上节中,我们提到表达转载 2022-06-08 17:25:01 · 566 阅读 · 0 评论 -
C++11——Lambda表达式
1. 基本用法lambda 表达式是 C++11 最重要也是最常用的特性之一,这是现代编程语言的一个特点,lambda 表达式有如下的一些优点:声明式的编程风格:就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或函数对象。简洁:避免了代码膨胀和功能分散,让开发更加高效。在需要的时间和地点实现功能闭包,使程序更加灵活。lambda 表达式定义了一个匿名函数,并且可以捕获一定范围内的变量。1.1 语法形式lambda 表达式的语法形式简单归纳如下:[capture](pa转载 2022-04-24 13:17:20 · 1049 阅读 · 0 评论 -
C++11 共享智能指针 shared_ptr
背景:C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露解决方案最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。C++11 中提供了三种智能指针,使用这些智能指针时需要引用头文件<memory>:原创 2022-04-19 23:11:15 · 444 阅读 · 0 评论 -
C++ this 指针的理解
1 引言:类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。注意:this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型。2 this指针的概念定义在 C++ 中,每一个对象都能通过 this 指针来访问自己的原创 2022-04-14 14:35:26 · 116 阅读 · 0 评论 -
C++中.h和.hpp文件的区别
C++中.h和.hpp文件的区别①.h1.1 .h文件是什么1.2为什么要使用.h文件1.3如何使用②.hpp2.1.hpp是什么①.h1.1 .h文件是什么1.2为什么要使用.h文件 在C++程序中,将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj( object/objective 编译单元 obj文件解释)一个程序,可以由一个编译单元组成,也可以有多个编译单元组成.如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.一个函数不能放到两个编译单原创 2022-04-03 06:23:09 · 2993 阅读 · 0 评论 -
LOWORD, HIWORD, LOBYTE, HIBYTE的理解
LOWORD()得到一个32bit数的低16bitHIWORD()得到一个32bit数的高16bitLOBYTE()得到一个16bit数最低(最右边)那个字节HIBYTE()得到一个16bit数最高(最左边)那个字节#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#include <vector>#include <windows.h>using names原创 2022-03-31 11:02:13 · 479 阅读 · 0 评论 -
“stdafx.h”: No such file or directory
1、报错这里的错误是,你包含了头文件 #include “stdafx.h” 产生所产生的,大概你是创建的空项目,却包含了这个头文件。2、解决办法办法一将头文件替换掉(建议此种做法,较简单);查看 “stdafx.h” 所包含的内容为:#include <stdio.h>#include <tchar.h>这里只需将你的 ,#include “stdafx.h” 删除掉。更换为 其所包含的内容。也就是:#include <stdio.h>#inclu原创 2021-07-12 15:58:40 · 3415 阅读 · 0 评论 -
GCC与gcc,g++区别
首先说明:gcc 和 GCC 是两个不同的东西GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc是GCC中的GUN C Compiler(C 编译器)g++是GCC中的GUN C++ Compiler(C++编译器)一个有趣的事实就是,就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,原创 2021-07-12 11:27:59 · 946 阅读 · 0 评论 -
头文件重复包含
一、头文件重复包含问题分析1) 问题重现举例说明。假设在某个C++ 头文件 或 源文件 中,包含了A.h和B.h两个头文件:#include “A.h”#include “B.h”事实上,在头文件B.h中也包含了头文件A的引用,即:#include"A.h"这样在编译这个文件时,因为文件包含了 A.h 这个头文件,编译器展开这个头文件,知道了 A 这个类的定义了,接着展开B.h头文件,而在B.h头文件中也包含了A.h,在此展开A.h,于是类A就重复定义了。以上就是头文件重复包含问题的重现过程原创 2021-07-12 11:14:28 · 3077 阅读 · 0 评论 -
void 类型详解
void 类型详解概述许多初学者对C/C++语言中的 void 及 void 指针类型不甚理解,因此在使用上出现了一些错误。void 含义void 的字面意思是 ”无类型“,void * 则为”无类型指针“,void * 可以指向任何类型的数据。void几乎只有注释和限制程序的作用,定义一个void变量没有意义,不妨试着定义:void a;这行语句编译时会出粗,提示"illegal use of type ‘void’"。不过,即使void a 的编译不会出错,它也没有任何实际的意义。vo原创 2021-06-28 11:41:39 · 159 阅读 · 0 评论 -
C++位操作、读取指定位的值
C++位操作、读取指定位的值1.将数据的某一位清0、置12.将数据的某一位拿出来判断是0 还是1#include <basetsd.h> //extern "C" : typedef unsigned int UINT32, *PUINT32;#include <process.h>#include <iostream>#define GetBit(v, n) ((v) & ((UINT32)1 << (n))) //获取v 的第原创 2021-05-13 17:20:41 · 4173 阅读 · 1 评论 -
C++ 获取系统当前时间
C++ 获取系统当前时间c++ time函数_C++的日期和时间函数获取系统当前时间实例c++ time函数_C++的日期和时间函数C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime>头文件。有四个与时间相关的类型:clock_t、time_t、size_t 和tm。类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。结构类原创 2021-05-11 11:50:23 · 22584 阅读 · 2 评论 -
C++每隔一段时间处理一些操作
C++每隔一段时间处理一些操作最近在做日本的项目,今天一个需求是:传感器采集到的数据写到一个TXT文件中,每隔一个小时更换一个新的文件写入时间控制的代码如下:#include <iostream>#include <time.h> using namespace std;int main(){ time_t start_time, end_time; time(&start_time); while (true) { time(&end_原创 2021-01-19 19:28:27 · 1769 阅读 · 0 评论 -
VS2013生成、使用dll,lib文件
VS2013生成、使用dll,lib文件1. 什么是库1.1 静态库1.1.1 Windows下创建与使用静态库1.1.1.1 创建静态库(.lib)1.1.1.1.1 创建项目时进行设置1.1.1.1.2 生成项目时进行设置1.1.1.2 使用静态库1.2 动态库1.2.1 为什么还需要动态库(静态库的缺点)?1.2.2 Windows下创建与使用动态库1.2.2.1 创建动态库(.dll)1.2.2.1.1创建前设置1.2.2.1.2 生成项目时设置1.2.2.2 使用动态库VS2013生成、使用dl原创 2020-12-18 01:07:29 · 923 阅读 · 0 评论 -
C++中string::find()函数和string::npos函数的使用
@TOC1. string::find()函数和string::npos函数的介绍 我们在学习C++的时候必不可少的使用到string类中的find()函数,它是一个查找函数,功能还是很强大的,但是此处我们不对他进行过多的讲解只是了解它的基本使用,最重要的是和string::npos的关系。string::find()函数: 是一个字符或字符串查找函数,该函数有唯一的返回类型,即string::size_type,即一个无符号整形类型,可能是整数也可能是长整数。如果查找成功,返回按照查找规则找到转载 2020-12-11 11:04:12 · 323 阅读 · 0 评论 -
深入理解构造函数和析构函数
深入理解构造函数和析构函数1.面向过程&面向对象1.1 面向过程策略1.2 面向对象策略2. 构造管 “生”3. 析构管“埋”4. “生”与“埋”举例5. 总结一下在谈类的构造前,先聊聊面向对象编程与面向过程的个人体会。1.面向过程&面向对象1.1 面向过程策略要谈这个问题,先来对比一下传统面向过程的编程策略: 比较典型的–C, Pascal, Basic, Fortran语言,传统的做法是整了很多函数,整合时主要是整合各函数的调用,main函数协调对过程的调用,并将适当的数据转载 2020-12-03 18:10:31 · 202 阅读 · 0 评论 -
C++支持文件输入输出的类
C++支持文件输入输出的类打开文件(Open a file)关闭文件(Closing a file)ofstream: 写操作(输出)的文件类 (由ostream引申而来)ifstream: 读操作(输入)的文件类(由istream引申而来)fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file) 对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。 被打开的文件在程序中由一个流对象(stream转载 2020-11-23 23:49:49 · 283 阅读 · 0 评论 -
c++设置域宽
c++设置域宽1.域宽2.setw()函数2.1头文件2.2setw()函数应用如下:2.2.1 设置域宽 < 数据长度2.2.2 设置域宽 = 数据长度2.2.3 设置域宽 = 数据长度2.2.4 setiosflags(ios::left)来实现输出左对齐1.域宽 用于存放输出数据的宽度称为“域宽”。 浮点数的域宽包含小数点如果域宽小于被打印数据的宽度,数据通常会在域内右对齐。如果输出值的宽度大于域宽时,域宽是自动增长的。域宽通常插在 百分号 和 转换说明符 之间2.setw原创 2020-11-23 23:07:23 · 7977 阅读 · 0 评论 -
如何理解C++中的.h文件和.cpp文件
如何理解C++中的.h文件和.cpp文件一、源文件如何根据#include来关联头文件二、头文件如何来关联源文件三、声明与定义的区分:综上所诉 建立一个以类为名字的XX.h文件,声明类,再建立一个相同名字的XX.cpp文件(要#include “XX.h”),实现类中的函数, 在有main 函数的.cpp里声明函数,建一个与函数名一样的.cpp文件,实现该函数;并且要 #include “XX.h”一、源文件如何根据#include来关联头文件 1.系统自带的头文件用尖括号括起来,这样编译器会在系转载 2020-11-23 14:14:43 · 3390 阅读 · 0 评论