简介本文介绍了C++中的静态类型、动态类型、RTTI。
静态类型C++ 是一种静态类型语言(static typing),这意味着类型检查是在编译时进行而非运行时。换句话说,每个变量、对象、函数返回值等在编译时都必须明确其类型。这种类型系统的主要优点是能够在程序运行之前发现类型不匹配等错误,从而提高代码的安全性和稳定性。
举一个例子
12345678910111213#include <...
介绍函数式编程是一种编程范式,它将计算视为数学函数的求值,并避免使用程序状态以及易变对象。其核心概念是使用函数来抽象作用在数据上的操作,而这些函数相互之间几乎没有或没有任何副作用。以下是一些函数式编程的关键特点:
不可变性:在函数式编程中,状态是不可变的。这意味着一旦创建,数据就不能改变。所有的变化都通过返回新的数据副本来完成,而不是直接修改现有数据。
纯函数:这些是没有副作用的函数。这...
利用条件变量实现线程安全队列
本文介绍如何使用条件变量控制并发的同步操作
条件变量试想有一个线程A一直输出1,另一个线程B一直输出2。我想让两个线程交替输出1,2,1,2…之类的效果,该如何实现?有的同学可能会说不是有互斥量mutex吗?可以用一个全局变量num表示应该哪个线程输出,比如num为1则线程A输出1,num为2则线程B输出2,mutex控制两个线程访问num,如果num和线...
写这篇文章的原因是今天在打2042的时候丢包严重,一开始以为是Dice的服务器又爆了,后面跟同学对比了之后发现完全是路由器的问题。刚好拨号和主路由用的是R2S,可以学习一下linux内核的一些跟TCP, UDP有关的参数修改
下面的参数可以在/etc/sysctl.conf这个文件中修改
另外再多说一句,Turbo acc这个插件对这种500M一下的带宽基本没什么作用
最大队列大小优化在...
互斥体与锁mutex开发并发系统的目的主要是为了提升性能:将任务分散到多个线程,然后在不同的处理器上同时执行。这些分散开来的线程通常会包含两类任务:
独立的对于划分给自己的数据进行处理
对于结果的汇总
其中第一项任务由于每个线程都是独立的,不存在竞争条件的问题。而第二个任务,由于所有的线程都可能往总结果汇总,这就需要做保护了。在某一个具体的时刻,只应当有一个线程更新结果,即:保证每个线程...
线程基础线程的创建12345678910111213141516#include <iostream>#include <thread>void func() { std::cout << "hello world\n";}int main() { std::thread t1(func); ...
调试运行环境设置运行参数123456789101112#include <iostream>int main (int argc, char *argv[]) { std::cout << "The arguments' count is: " << argc << std::endl; fo...
本文主要描述了GDB中断点调试和数据命令的使用方法
断点调试设置断点要设置断点时,使用break或b来设置断点
1b main.cpp:5
条件断点有时,我们只想在满足特定条件时暂停程序
1b main.cpp:5 if i == 5
查看断点如果需要查看所有断点所在的位置信息,使用info breakpoints
1info breakpoints
清除断点有些断点我们不再需要,可...
本文主要描述了GDB的基础命令使用
GDB 介绍GDB,全称GNU调试器(GNU Debugger),是一个强大的Unix系统下的源代码级调试工具。它可以帮助程序员查看程序在执行过程中的内部状态,从而更好地理解程序的运行机制。GDB主要用于调试C和C++语言编写的程序。它的存在,使得我们能够更深入地了解程序的运行过程,找出并修复程序中的错误。
基本命令启动GDB假如我们有一个编译好的C++程...
类简介类就是对一种类型的抽象,例如纸箱、木箱都是箱子,箱子就是类,而木箱、纸箱就是类实例化的对象
构造函数类相当于定义了一个新的类型,该类型生成在堆或栈上的对象时内存排布与C语言相同。C++规定有在类对象创建时就在对应内存将数据初始化的能力,这就是构造函数
例子:
1234567891011121314151617181920212223242526272829303132333435363...