自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 05 了解C++ 默默编写并调用哪些函数

条款-05 了解C++ 默默编写并调用哪些函数编译器可以暗自为 class 创建 default 构造函数、copy构造函数、copy assigment操作符,以及析构函数。如果你写下:class Empty();这就好像你写下这样的代码:class Empty(){ public: Empty(){……} // 默认构造函数 ~Empty(){……} // 默认析构函数 Empty( const Empty &rhs){……} // 拷贝构造函数

2021-01-31 21:21:51 183

原创 04-确定对象被使用前已被初始化

条款04-确定对象被使用前已被初始化为内置型对象进行手工初始化,因为C++不保证初始化它们。构造函数最好用成员初始值列(member initialization list),而不要在构造函数本体内使用赋值操作(assignment)。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同。为免除“跨编译单元之初始化次序”问题,请以local static对象替换 non-local static对象。对指针的初始化:使用 const(在条款-03中有说明,当const在星号左边

2021-01-29 12:18:35 149

原创 03-尽可能使用 const

条款03-尽可能使用 const1.char greeting[] = "hello";char *p = greeting; //non-const pointer, non-const dataconst char *p = greeting; //non-const pointer, const datachar* const p = greeting; //const pointer, non-const dataconst char* const p = greet

2021-01-29 11:00:54 121

原创 inline关键字说一下 和宏定义有什么区别

inline 是内联的意思,可以定义比较小的函数。因为函数频繁调用会占用很多的栈空间,进行入栈出栈操作也耗费计算资源,所以可以用inline关键字修饰频繁调用的小函数。编译器会在编译阶段将代码体嵌入内联函数的调用语句块中。内联函数在编译时展开,而宏在预编译时展开。在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能。宏不是函数,而inline是函数;宏在定义时要小心处理宏参数,一般用括号括起来,否

2021-01-29 10:41:20 262

原创 02 尽量以 const、enum、inlinen 替换 #define

条款-02 尽量以 const、enum、inlinen 替换 #define1-对于单纯常量,最好以 const 对象 或 enums 替换 #defines。2-对于形似函数的宏(macros),最好改用 inline 函数替换 #defines。在用**#define**进行预处理时:#define AA 1.653​ 可能会在记号式调试器(symbolic debugger)中,名称 AA 未进入记号表(symbol table)或者编译器未看见 AA 而产生误差。​ 解决方法

2021-01-29 10:39:35 111

原创 define、const、typedef的区别与联系

define 和const的联系与区别(编译阶段、安全性、内存占用等)联系:它们都是定义常量的一种方法。区别:• define定义的常量没有类型,只是进行了简单的替换,可能会有多个拷贝,占用的内存空间大;const定义的常量是有类型的,存放在静态存储区,只有一个拷贝,占用的内存空间小。• define定义的常量是在预编译阶段进行替换,而const在编译阶段确定它的值。• define不会进行类型安全检查,而const会进行类型安全检查,安全性更高。• const可以定义函数而define不可以

2021-01-29 10:28:31 889 2

原创 01 让自己习惯C++

条款-01 让自己习惯C++​ C++最先只是C加上一些面向对象特性,也就是 C with Classes。​ C++现在是一个多重泛型编程语言(multiparadigm programming language),同时支持过程形(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)的语言。C++可以(理解成)以下四种语言的结合:C:但它比C语言多了模版(templ

2021-01-29 10:24:17 234

原创 《UNIX环境高级编程——APUE》

《UNIX环境高级编程——APUE》【附】小知识1、同步、异步概念:消息的通知机制解释:涉及到IO通知机制;同步,就是发起调用后,被调用者处理消息,必须等处理完才直接返回结果,没处理完之前是不返回的,调用者主动等待结果;eg. 我去银行办理业务, 选择排队等,排到头了就办理。异步,就是发起调用后,被调用者直接返回,但是并没有返回结果,等处理完消息后,通过状态、通知或者回调函数来通知调用者,调用者被动接收结果。eg. 我去银行办理业务*,* 取一个小纸条上面有我的号码*,* 等到排到我这一

2021-01-29 10:15:40 1501

原创 UDP如何实现可靠传输

因为UDP是无连接的协议,所以在传输层上无法保证可靠传输,要想实现可靠传输,只能从应用层实现。需要实现seq/ack机制,重传机制和窗口确认机制。就要接收方收到UDP之后回复个确认包,发送方有个机制,收不到确认包就要重新发送,每个包有递增的序号,接收方发现中间丢了包就要发重传请求,当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整,调整算法要有一定自适应性。...

2021-01-22 23:27:45 373

原创 TCP服务器建立

建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:socket(),bind(),listen(),accept(),send()和recv()。如下图所示,TCP应用程序进行的普通调用序列:TCP调用的各个层:(1)套接字层接收进行的任何 TCP 系统调用。套接字层验证 TCP 应用程序传递的参数的正确性。这是一个独立于协议 的层,因为尚未将协议连接到调用中。(2)套接字层下面是协议层,该层包含协议的实际实现(本例中为 TCP)。当套接字层对协议层进行

2021-01-22 23:03:38 1768

原创 Linux高并发web服务器

代码入口描述:

2021-01-15 14:03:53 307

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除