CStruct

C++14新特性的所有知识点全在这儿啦!

狂风中的少年 提交于 2020-08-04 12:42:25
前面程序喵介绍过C++11的新特性,在这里(),这篇文章介绍下C++14的新特性。 函数返回值类型推导 C++14对函数返回类型推导规则做了优化,先看一段代码: #include <iostream> using namespace std; auto func(int i) { return i; } int main() { cout << func(4) << endl; return 0; } 使用C++11编译: ~/test$ g++ test.cc -std=c++11 test.cc:5:16: error: ‘func’ function uses ‘auto’ type specifier without trailing return type auto func(int i) { ^ test.cc:5:16: note: deduced return type only available with -std=c++14 or -std=gnu++14 上面的代码使用C++11是不能通过编译的,通过编译器输出的信息也可以看见这个特性需要到C++14才被支持。 返回值类型推导也可以用在模板中: #include <iostream> using namespace std; template<typename T> auto func(T t) {

带你重新认识指针(下)

不羁岁月 提交于 2020-02-27 05:52:12
真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血。这是怎样的哀痛者和幸福者?然而造化又常常为庸人设计,以时间的流驶,来洗涤旧迹,仅使留下淡红的血色和微漠的悲哀。在这淡红的血色和微漠的悲哀中,又给人暂得偷生,维持着这似人非人的世界。我不知道这样的世界何时是一个尽头!我们还在这样的世上活着;我也早觉得有写一点东西的必要了。 ——鲁迅 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 点关注,不迷路!!!   看完我上一篇指针的讲解之后很多同学反馈很不错,有网友给私信说之前在大学里面一直搞不懂指针的问题,说到指针都是云里雾里,老师讲的也是很难听懂 , 点击即可进入 指针(上) 。也有很多网友表示非常期待指针下的文章,所以我就马不停蹄的继续写 ,下 主要讲解指针的特性以及指针安全问题。 指针的特性 指针和常量  先说下什么是常量,常量就是不可变的量,一旦定义该常量,其值在整个程序生命周期都是不可变的,常量存放在虚拟地址空间的常量区。  在C语言里面有两种定义常量的方法。 使用const关键字 , const 定义的是变量不是常量,只是这个变量的值不允许改变是常变量,带有类型。编译运行的时候起作用存在类型检查。 使用#define预处理器, define 定义的是不带类型的常数

一般情况下C struct结构体内存分配

时光总嘲笑我的痴心妄想 提交于 2020-02-26 09:35:56
c语言中struct的结构体的内存分配解析 测试环境:4.10.0-38-generic #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 代码如下 #include<stdio.h> #include<string.h> struct example1 { int a; int b; char c; char d; double e; }; struct example2 { int a; char c; int b; double e; char d; }; int main() { int i; struct example1 ex1 = {1, 2, 'a', 'b', 99.9}; struct example2 ex2 = {1, 'a', 2, 'b', 99.9}; printf("size of structure ex1 in bytes %d\n", sizeof(ex1)); printf("size of structure ex2 in bytes %d\n", sizeof(ex2)); printf("Address

c语言的typedef

断了今生、忘了曾经 提交于 2020-01-06 17:13:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> c语言的typedef真是个好东西 一般说来,当我们使用定义结构体struct的时候,我们要定义结构体变量,需要使用这样的方式: struct student { int id; char name[128]; }; //声明结构体变量 struct student s1; //声明结构体指针且分配内存 struct student * p_stu = (struct student*)malloc(sizeof(struct student)); 可以看到,使用结构体,要写非常多的冗余代码。 此时,我们可以定义别名,来简化这种写法,如下所示: typedef struct student_s { int id; char name[128]; } student; student s1; student p_str = (student*)malloc(sizeof(student)); 果然,写法变简单了!!!,可以说这其实是c语言的缺陷,所以才要使用typedef来定义类型别名的!!! 有时候,我们可以发现,有的库,在h文件定义结构体,有的也在c文件内定义结构体,为什么要这样呢?因为c文件内定义的结构体不会被其他人引用,而头文件内可以被其他文件引用,所以,在c文件内定义结构体就是为了隐藏定义

Redis事件和服务器

∥☆過路亽.° 提交于 2019-11-29 08:57:11
Redis事件和服务器 事件 Redis是个单线程的,但是速度非常快,其主要原因是因为它是基于事件的,是一个事件驱动程序,了解NIO的应该都知道这种方式。 Redis服务器需要处理两类事件。 文件事件(file event): Redis服务器通过套接字与客户端进行连接,而**文件事件就是服务器对套接字操作的抽象。**服务器与客户端的通信会产生相应的文件事件,而服务器通过监听并处理这些事件来完成一系列网络通信操作。 时间事件(file event): Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。 文件事件 Redis基于Reactor模式开发了自己的网络事件处理器,则个处理器被称为文件时间处理器(file event handler): 文件事件处理器采用I/O多路复用(multiplexing)程序来同时监听多个套接字,并根据套接字目前崭新的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好连接应答(accept),读取(read),写入(write),关闭(close)等操作时,与操作对应的文件事件就会产生,这是文件时就处理器就会调用套接字之前关联号的事件处理器来处理这些事件。 构成 文件时间处理器由四个部分组成,分别是套接字。I/O多路复用程序,文件事件分发器(dispatcher