C/C++
thinkerleo7798
这个作者很懒,什么都没留下…
展开
-
C语言基础数据类型 结构体和联合体的区别
在C语言中结构体是这样定义的:union struct{ float a; float b; int c;}data_t;联合体是这样定义的:union data{ float a; float b; int c;}data_t;但是他们的功能完全不同~~联合体:“ 需要使几种不同类型的变量存放到同一段内存单元中。也就原创 2016-01-30 15:53:33 · 1776 阅读 · 0 评论 -
【笔记】MFC中的消息框messagebox()的用法
1.MessageBox("这是一个最简单的消息框!"); 2.MessageBox("这是一个有标题的消息框!","标题"); 3.MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL ); 4.MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION ); 5.MessageBox("这是一个两种属原创 2016-03-09 17:27:01 · 3588 阅读 · 0 评论 -
《Effective C++》条款25:考虑写出一个不抛异常的swap函数
swap是两个元素交换的函数,在STL中也有对应的实现,其基本实现为:namespace std{ template<typename T> void swap(T& a, T& b){ T temp(a); a = b; b = temp; }}这个置换方式和大多数人想象的一样,它涉及到三个对象的复制: a复制到temp原创 2017-10-25 14:05:03 · 290 阅读 · 0 评论 -
C++中的Unicode编码:wchar, UTF-8,UTF-16,UTF-32
C++在C11标准中加入了对Unicode编码的支持,新增了wchar_t、char16_t、char32_t内置数据类型。 cout << sizeof(char) << endl; cout << sizeof(wchar_t) << endl; cout << sizeof(char16_t) << endl; cout << sizeof(char32_t) <原创 2017-11-14 20:29:34 · 3114 阅读 · 0 评论 -
Google C++ 风格指南 :尽可能用 sizeof(varname) 代替 sizeof(type).
5.18. sizeofTip尽可能用 sizeof(varname) 代替 sizeof(type).使用 sizeof(varname) 是因为当代码中变量类型改变时会自动更新. 您或许会用 sizeof(type) 处理不涉及任何变量的代码,比如处理来自外部或内部的数据格式,这时用变量就不合适了。Struct data;Struct data; memset转载 2017-11-29 17:12:30 · 832 阅读 · 0 评论 -
C++中的委托构造
委托构造,就是构造函数调用其他的构造函数来完成构造过程,其他的构造函数写在成员初始列表中。using namespace std;class base{private: int a;public: //非委托函数使用相应的实参初始化相应的实参初始化成员 base(int a): a(a){}; //将构造任务委托给了base(int a)函数 bas原创 2017-11-30 23:11:54 · 401 阅读 · 0 评论 -
C++中const的用法:使代码更加健壮
本文将从三个方面来讨论const带来的代码健壮性:const在变量中的用法,const在函数中的用法,const作为返回值的用法。const在变量中的用法代码示例:int num = 1;const int a = 1; //a的值不能被改变const int *b = # //b的值不能被改变,这个指针的类型是(const int)const data,not const原创 2017-11-23 21:50:15 · 1864 阅读 · 0 评论 -
C++ 11:delete关键词和一条《Effective C++》的过时条款
C++ 11:delete关键词和一条《Effective C++》的过时条款原创 2017-11-24 00:53:34 · 1173 阅读 · 0 评论 -
C++中lambda表达式(匿名函数)的用法
简介之前在看SICP《计算机程序的构造和解释》一书的时候,中用了大量的Scheme语言(一种Lisp语言的方言)来解释书中的函数式程序设计思想(只读到第二章后半部。。。有空再补)。Scheme的一个主要特性是可以像操作数据一样操作函数调用, 例如实现对一个操作生成的数乘以二的函数:;这是一个实现对某个值进行乘方的函数(define square (lambda (x) (* x x)));这原创 2017-12-06 22:47:58 · 1724 阅读 · 3 评论 -
C++中的智能指针(1):shared_ptr 的介绍和用法
原理简介C++中采用new和delete来创建(申请)和释放(销毁)内存,但是因为释放内存时机把握不当、忘记释放内存等原因,很难准确及时地管理内存。 因此,C++标准库推出了智能指针机制来更好的管理内存,智能指针能自动释放所指向的对象。shared_ptr简介shared_ptr 允许多个指针指向 同一个对象,它基于模板实现,默认初始化的智能指针中保存着一个空指针。当进行拷贝或者赋值操作时,原创 2017-12-16 13:50:41 · 11665 阅读 · 0 评论 -
为什么C++11引入了std::ref?
本文转载自:https://www.cnblogs.com/jiayayao/p/6527713.html如有侵权,通知删除 C++本身有引用(&),为什么C++11又引入了std::ref? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用。如下例子:#include #include转载 2017-12-17 22:52:33 · 1926 阅读 · 0 评论 -
《Effective C++》:学习处理模板化基类内的名称
假设有以下需求: 要给N个公司发信息,目前有Alibaba、Microsoft、Amazon三家公司,给Microsoft、Amazon发送明文,给Alibaba发送密文(特殊情况),可以用C++模板技术来实现。class Alibaba{public: //给Alibaba发送密文 static void SendCryMsg(){ std::cout...原创 2018-05-04 16:44:23 · 245 阅读 · 0 评论 -
C++模版与特化与偏特化
模版与特化的概念函数模版与类模版C++中模板分为函数模板和类模板函数模板:是一种抽象函数定义,它代表一类同构函数。类模板:是一种更高层次的抽象的类定义。特化的概念所谓特化,就是将泛型的东东搞得具体化一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰(例如const或者摇身一变成为了指针之类的东东,甚至是经过别的模板类包装之后的模板类...转载 2018-05-04 17:06:48 · 239 阅读 · 0 评论 -
C++11的enum class 、enum struct 和 enum
原文地址:https://blog.csdn.net/sanoseiichirou/article/details/50180533侵删C++标准文档——n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf旧版enum存在的问题1 问题1向整形的隐式转换2 问题2无法指定底层所使用的数据类型...转载 2018-05-17 19:49:35 · 17745 阅读 · 6 评论 -
C++ throw()关键词:一个被C++标准抛弃的玩意儿
throw()关键词相信大家在很多C++教程或者代码中看到过,这个博客以一Stackoverflow上的问题开始:应该在C++中使用throw()关键词吗?回答是:不应该 理由主要是各个编译器并没有一个统一的标准去处理这个关键词,还有这个关键词作用很累赘等等,总之是不应该的。Anyway,throw关键词被C++11抛弃了,C++11标准提出了新的关键词:noexcept 一般来说...原创 2018-05-06 17:44:13 · 22002 阅读 · 8 评论 -
一个简单引用计数智能指针的实现
template <typename T>class SharedPtr{public: SharedPtr() = delete;//不允许未初始化的智能指针,防止使用空指针 SharedPtr(const SharedPtr&) noexcept; //拷贝构造 SharedPtr(T*) noexcept; //shallow copy ...原创 2018-05-06 17:51:02 · 320 阅读 · 0 评论 -
C++11中的“万能引用”
首先我们来看一个函数模板的代码:template<typename T>void func(T& param){}这里模板函数参数接收一个引用,但是却不能这样调用:func(27);//error: invalid initialization of non-const reference of type ‘int&’ from an rvalue o...原创 2018-05-23 09:09:06 · 4289 阅读 · 1 评论 -
C++11:尽量使用std::array来代替数组
C++11后,标准库引入了更现代化的数组std::array,cppreference.com是这样介绍的:定义于头文件 &lt;array&gt;template&lt; class T, std::size_t N &gt; struct array;(C++11 起)std::array 是封装固定大小数组的容器。此容器是一个聚合类型,其语义等同于保有...原创 2018-05-23 09:38:34 · 59201 阅读 · 1 评论 -
C++内存泄漏的几种情况
原文地址:http://www.cnblogs.com/SeekHit/p/6549940.html#commentform1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存;二是在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存转载 2017-10-08 12:43:33 · 3202 阅读 · 0 评论 -
C++ 类的空间大小计算基本方法
在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。 如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间 虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。 sizeof的本质是得到某个类型的大小,确切的来说就转载 2017-07-27 10:14:36 · 6574 阅读 · 0 评论 -
转自知乎 《Unicode 和 UTF-8 有何区别?》
著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:uuspider 链接:http://www.zhihu.com/question/23374078/answer/65352538 来源:知乎你看到的unicode字符集是这样的编码表:I 0049 t 0074 ’ 0027 s 0073 0020 知 77e5 乎 4e4e 日 65e5转载 2016-03-03 17:51:57 · 940 阅读 · 0 评论 -
c++中一个关于模板的小例子
#includeusing namespace std;templateT sum(T *begin,T *end){ T *p=begin; T ans = 0; for(T *p=begin;p!=end;p++) {ans=ans+*p;} return ans;}int main(){ int a[3]={1,2,3}; flo原创 2016-03-04 23:31:56 · 259 阅读 · 0 评论 -
c++ 类的继承 小实例
class person{private: string name; string sex; int age;public: //省略函数};class Student:public person{private: string major; int index;public: //省略函数};class Tea原创 2016-03-06 00:54:22 · 554 阅读 · 0 评论 -
Linux C: 基于C/S的多线程网络编程 2 (多客户端)
客户端:#include#include#include#include#include#include#include#include#include#includechar name[64];int tcp_connect(const char* ip, int port) //用于客户端的连接{ int sfd = socket(AF_INET, SO原创 2016-07-07 00:36:54 · 952 阅读 · 0 评论 -
linux内核结构体中的.owner = THIS_MODULE是什么
其实这是Linux内核代码中一种特殊的结构体初始化方式---指定初始化。因为才谭浩强的书上也没有提到过,看过了一些C语言书也没有提到过。今天一查,原来这个是C99标准,这个目前也是最新的标准,之前我也清楚这件事,但是没意识到这是一个差别。在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定转载 2016-09-09 01:08:09 · 3052 阅读 · 0 评论 -
linux设备驱动中file_operations结构体分析
struct module *owner第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 中定义的宏.loff_t (*llseek) (struct file *, loff_t, int);llseek 方转载 2016-09-24 10:23:49 · 408 阅读 · 0 评论 -
网络文件系统nfs文件系统使用
转自:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/30/1768474.html一、NFS简介1、NFS就是Network FileSystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(sharefiles)——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将转载 2016-10-27 14:23:03 · 562 阅读 · 0 评论 -
Linux之日志系统
Linux之日志系统实验介绍日志数据可以是有价值的信息宝库,也可以是毫无价值的数据泥潭。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。收集你想要的数据,分析出有价值的信息,可以提高系统、产品的安全性,可以帮助开发完善代码,优化产品。日志会成为在事故发生后查明“发生了什么”的一转载 2016-10-21 00:17:05 · 1473 阅读 · 0 评论 -
C语言中,"int* a, b, c;" 是正确写法吗?
有以下的C语言代码int* a, b, c;int *a, *b, *c;int *a, b, c;其中哪些语句是等价的? 哪些语句又是指针的正确写法?对于这些问题,相信一开始学习指针的同学都有些迷惑,现在来剖析一下它们吧 很多人喜欢用第一种写法定义指针 int*, char*…理解为int型指针、char型指针这样理解不错,但是写法却是不规范的 int * a, b, c; 的实际含义原创 2017-06-30 11:36:30 · 14002 阅读 · 2 评论 -
C 语言中函数可变参数列表
现在有个问题:设计一个函数,能接受多个int数据类型参数,求其平均值这就要用到C语言中参数列表了,需要头文件 stdarg.h 的支持/***计算指定数量的值的平均值*/#include <stdio.h>#include <stdarg.h>float average(int n_values, ...);int main(){ printf("%f", average(1, 2,原创 2017-06-30 16:48:16 · 307 阅读 · 0 评论 -
C++11中的左引用和auto类型说明符
左引用:左引用是C++11中的新特性,创建一个“引用型变量”(有点像创建指针) 使用方法示例:int a = 1;int &b = a;这里b引用了a 错误用法示例 :int &a = 1; //引用类型的初始值必须是一个对象int &b; //引用类型必须要初始化auto类型说明符:C++新标准引入了auto类型说明符,用它能让编译器代替我们分析表达式所属的类型。 使用方法示例:原创 2017-07-02 12:12:19 · 3088 阅读 · 0 评论 -
C++中的typeid关键字
typeid是C++中RTTI(Run-TimeType Information, 运行时类型识别)机制的组成部分,其目的是根据传入已有的参数,来判断参数的数据类型。对于基本数据类型的用法与运行结果(g++ 6.3.0):#include <iostream>#include <typeinfo>using namespace std;int main(){ int a = 0;原创 2017-07-16 11:16:15 · 351 阅读 · 0 评论 -
C++仿函数详解
仿函数,简单来说,使用一个类来实现一个函数,通过运算符重载,使得这个类有函数的对应功能。 举个简单仿函数实现的例子:#include <iostream>#include <algorithm>using namespace std;template<typename T>class testFunctor_dis{ public: void operator()(const原创 2017-07-16 13:36:41 · 471 阅读 · 0 评论 -
C++vector容器大小增长规律的总结
问:“vector大小是如何增长的?” 答:“自动增长的” 问:“增长规律是怎么?” 答: 。。。。。。 那么, 今天就来探究一下vector容器的大小增长规律:vector中得到大小的的函数有以下几个 方法 作用 size() 返回容器的大小 empty() 判断容器是否为空 max_size() 返回容器最大的可以存储的元素 capacity()原创 2017-07-17 16:20:48 · 4766 阅读 · 3 评论 -
Linux C: 基于C/S的多线程网络编程 (服务器充当一个客户端的两点传输)
基于C/S的多线程网络编程原创 2016-07-07 00:29:59 · 1285 阅读 · 0 评论 -
左值、左值引用、右值、右值引用
转载自:http://www.cnblogs.com/SZxiaochun/p/8017475.html 左值、左值引用、右值、右值引用 1、左值和右值的概念 左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体; 右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。 一个对象被用作右值时,使用的...转载 2018-06-20 22:42:50 · 759 阅读 · 0 评论