C/C++基础
文章平均质量分 71
C++基本使用与C++标准库
瞻邈
老菜鸟一个。
展开
-
C++全局变量
在所有函数外部定义的变量(通常在函数头部),称为全局变量。其可以被任何函数访问,通俗的说全局变量一旦声明,那么在整个程序中是可以调用的。并且全局变量的值在程序的整个都是有效的。原创 2024-04-30 09:14:10 · 768 阅读 · 0 评论 -
C++多态与继承
父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)3,如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调用成员函数时,到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定。————————————原创 2022-08-18 20:52:38 · 356 阅读 · 0 评论 -
C/C++生成随机数
只要产生随机数而不需要设定范围的话,只要用rand()就可以了,rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。原创 2022-07-28 09:23:17 · 36764 阅读 · 3 评论 -
深入理解协程
进程是程序动态运行的一个过程,是操作系统资源分配和独立运行的基本单位。其有自己独立的内存空间,不同的进程之间通过各种相对应的通信方式进行通信。但又因为进程拥有独立的内存空间,所以它的上下文切换(栈,寄存器,页表,文件句柄等)开销就比较大,但是相对来说进程的运行就比较安全稳定。原创 2024-06-01 00:09:04 · 1336 阅读 · 0 评论 -
C++读写CSV文件
CSV (逗号分隔值文件格式)逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存原创 2022-07-22 17:26:26 · 2899 阅读 · 0 评论 -
C++线程池
线程池维护者多个线程,等待着分配可并发执行的任务,可以避免在短时间创建和销毁大量线程带来时间成本。线程池的优点: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。原创 2021-12-09 16:52:20 · 469 阅读 · 0 评论 -
大端与小端
大端:高地址存低字节,低地址存高字节小端:低地址存低字节,高地址存高字节人类读写数据习惯是大端字节序,原创 2022-10-01 20:11:04 · 3296 阅读 · 0 评论 -
#pragma pack 内存对齐
因为计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。原创 2021-10-15 00:22:20 · 1175 阅读 · 0 评论 -
#pragma once与#ifndef的区别
pragma once 和 #ifdef 都可以避免同一个文件被include多次,但二者的含义略有不同。原创 2021-09-17 18:31:02 · 1085 阅读 · 0 评论 -
指针的底层原理与使用
我已经把自己知道的所有指针相关的概念、语法、使用场景都作了讲解,就像一个小酒馆的掌柜,把自己的美酒佳肴都呈现给你,但愿你已经酒足饭饱!如果以上的内容太多,一时无法消化,那么下面的这两句话就作为饭后甜点为您奉上,在以后的编程中,如果遇到指针相关的困惑,就想一想这两句话,也许能让你茅塞顿开。指针就是地址,地址就是指针。指针就是指向内存中的一块空间,至于如何来解释/操作这块空间,由这个指针的类型来决定。转载 2021-08-31 22:28:35 · 1481 阅读 · 2 评论 -
堆内存与栈内存
这篇文章分享一个面试中经常被问到的知识点:堆内存和栈内存有什么区别?平时开发应该使用堆内存还是栈内存?要回答这个问题,我们首先需要知道什么是堆内存,什么是栈内存,它们的分配和回收有什么特点?原创 2022-10-05 11:48:40 · 1171 阅读 · 0 评论 -
C++内存分配和管理
malloc:申请指定字节数的内存。申请到的内存中的初始值不确定。calloc:为指定长度的对象,分配能容纳其指定个数的内存。申请到的内存的每一位(bit)都初始化为 0。realloc:更改以前分配的内存长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定。alloca:在栈上申请内存。程序在出栈的时候,会自动释放内存。但是需要注意的是,alloca 不具可移植性, 而且在没有传统堆栈的机器上很难实现。原创 2021-08-18 00:12:31 · 358 阅读 · 1 评论 -
C++宏assert()断言
断言,是宏,而非函数。assert 宏的原型定义在<assert.h>(C)、<cassert>(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义NDEBUG来关闭 assert,但是需要在源代码的开头,include <assert.h>之前。#define NDEBUG // 加上这行,则 assert 不可用#include <assert.h>assert( p != NULL ); /...原创 2022-10-01 20:53:25 · 784 阅读 · 0 评论 -
ccache编译器缓存使用方法
ccache(全称:compiler cache)是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息,比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。 ccache 主页:https://ccache.dev/ 文档地址:https://ccache.dev/documentation.html GitHub 源码:https://github.com/ccache/ccache 1. 安装 ccache要安装 cca原创 2021-07-09 20:57:48 · 1832 阅读 · 0 评论 -
C++列表初始化容器
在这篇博客中,我们将深入探讨C++中列表初始化容器的方法和技巧。我们将从基本的初始化语法讲起,逐步介绍如何使用列表初始化来初始化各种类型的容器,包括数组、向量、列表等。此外,我们还将讨论列表初始化的优势,如代码简洁性、可读性和灵活性等方面的提升。通过本文的学习,读者将能够更加熟练地运用C++的列表初始化功能,提高代码的质量和效率。无论你是C++初学者还是有一定编程经验的开发者,本文都将为你提供有价值的参考和指导。原创 2021-07-03 19:54:36 · 466 阅读 · 2 评论 -
C++左值与右值
定义:可以放到等号左边的东西叫左值。其具有内存地址和可修改,其可以用于分配新值或者获取对象的地址。原创 2021-07-02 15:58:19 · 4092 阅读 · 8 评论 -
C++类型转换
普通指针转换dynamic_cast 和 static_cast 都可以用来强制转换指针类型,但不同的是dynamic_cast在进行类层次间的下行转换时更加安全。dynamic_cast 运算符可以在执行期决定真正的类型。如果下行转换是安全的(也就是说,如果基类指针或者引用确实指向一个派生类对象),这个运算符会传回转型过的指针。如果下行转换不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。说了这么多是什么意思呢?总结可以是两句话:1)在类层次间进行上行转换原创 2021-06-24 16:03:28 · 374 阅读 · 0 评论 -
C++自定义Log工具
Log工具对于开发者意义很大,可以把所有的Log信息保存下来,便于回溯、问题记录等。glog是一个很优秀的Log工具,但在可扩展性和可配置必上还是有一些不足。例如:原创 2021-04-29 14:58:30 · 584 阅读 · 0 评论 -
C++运行时类型信息 (RTTI)
RTTI是”Runtime Type Information”的缩写,意思是运行时类型信息,它提供了运行时确定对象类型的方法。RTTI并不是什么新的东西,很早就有了这个技术,但是,在实际应用中使用的比较少而已。而我这里就是对RTTI进行总结,今天我没有用到,并不代表这个东西没用。学无止境,先从typeid函数开始讲起。原创 2021-02-11 11:49:10 · 548 阅读 · 0 评论 -
类继承中的构造函数与析构函数
子类的初始化列表,只能对子类的成员变量进行初始化上面代码会报下面的错误。原创 2021-01-21 17:24:15 · 391 阅读 · 0 评论 -
C++加快编译速度的方法
C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 - 面前放本书,一点build按钮,就低头读一会书~~~往事不堪回首。可以想象,如果不加以重视,编译速度极有可能原创 2021-01-19 11:10:53 · 6566 阅读 · 3 评论 -
C++浮点数
在C++中有以下 3 种数据类型可以表示浮点数,分别是float、double和long double。float 数据类型被认为是单精度。double 数据类型通常是 float 的两倍大小,因此被认为是双精度。顾名思义,long double 数据类型又比 double 要大。这些数据类型的确切大小取决于当前使用的计算机。唯一可以保证的是:double 至少与 float 一样大。 long double 至少与 double一样大。数据类型 关键字 大小 范...原创 2021-01-06 19:58:26 · 4418 阅读 · 1 评论 -
C++静态变量
C语言中与“静态”相关的词包括,静态全局变量,静态局部变量和静态函数,关键词是static。C语言中的变量从作用域分,可以分为全局变量和局部变量;从存储方式分,可以分为静态存储方式和动态存储方式。原创 2024-04-22 13:19:15 · 1613 阅读 · 1 评论 -
C++从键盘读取字符
本文中,我们将深入探讨C++如何从键盘读取字符。作为编程的基础操作之一,字符输入在C++程序中扮演着重要的角色。通过掌握这一技能,开发者可以接收用户输入的字符数据,并将其用于程序逻辑处理或数据操作。我们将介绍C++中常用的字符输入函数,如cin等,并详细解释其使用方法和注意事项。此外,我们还将分享一些实际编程示例,帮助您更好地理解和应用这些函数。通过本文的学习,您将能够轻松掌握C++从键盘读取字符的基本技巧,为您的C++编程之旅打下坚实的基础。原创 2020-12-18 14:20:00 · 1284 阅读 · 0 评论 -
C++时间获取
在C++编程中,获取时间是一个基础而关键的操作,它对于程序的日志记录、性能分析、用户交互以及安全性保障等方面都具有重要作用。本文将详细介绍在C++中如何通过各种方式获取当前时间,包括使用标准库中的时间函数、系统API以及第三方库等。我们将探讨不同方法的优缺点,并给出相应的代码示例和最佳实践。通过本文的学习,读者将能够掌握在C++程序中高效、准确地获取时间的方法,从而提升程序的性能、可靠性和用户体验。原创 2020-12-23 14:32:13 · 1762 阅读 · 0 评论 -
单件模式的安全实现
《Effective C++》推荐如下写法,但该写法只对C++11及以后的版本才是安全的。原创 2020-12-22 12:10:50 · 191 阅读 · 1 评论