![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++高阶
文章平均质量分 83
知之可否
这个作者很懒,什么都没留下…
展开
-
C++ TR1 智能指针shared_ptr的使用(转)
在 c++ 98 里面只有一种智能指针,就是 std::auto_ptr,因为具有唯一所有权的特征,所以限制了它的使用范围,比如你无法在容器中使用它。而我们知道 stl 容器是值语义的,如果不能用智能指针管理的话,只有两种办法来使用。一种是类似这样:std::vector names;names.push_back("cyberscorp转载 2016-05-11 10:16:09 · 722 阅读 · 0 评论 -
c++ 中的fill 和memset
fill 的头文件是 命名空间是std; 用法: eg: #include using namespace std; int main() { char s[100]; fill(s,s+100,'a'); for(int i=0;i cout cout转载 2016-07-29 15:05:34 · 1638 阅读 · 0 评论 -
extern C的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有转载 2016-07-30 17:28:30 · 2017 阅读 · 0 评论 -
Boost智能指针——scoped_ptr
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:#include #include #include class implementation{public: ~implementation() { std::cout转载 2016-07-30 17:35:03 · 387 阅读 · 0 评论 -
C程序编译过程浅析
前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。我现在一般都是用gcc,所以自然以GCC编译hellworld为例,简单总结如下。 hello.c源代码如下:?[Copy to clipboard]View Code C123456转载 2016-08-29 21:45:40 · 632 阅读 · 0 评论 -
C/C++内存泄漏及检测
该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一直转载 2016-08-30 21:56:21 · 522 阅读 · 0 评论 -
我所理解的C++反射机制
转自点击打开链接1.前言在实际的项目中,听到师兄说C++中用到了反射,出于好奇,就查阅相关资料,发现强大的C++本身并不支持反射,反而Java支持反射机制。当我得知这个事实时,一直唯C++马首是瞻的我,心中暗自落泪,悲叹不已。但是,C++的fans别难受,强大的C++本身不支持,但却可以让我们手动实现,真的是曲径通幽处,禅房花木深。C++是不会辜负我们对它的至死不渝的热枕与转载 2016-08-20 16:29:40 · 2609 阅读 · 3 评论 -
翻译:怎样理解 C++ 11中的move语义(基础)--- An answer from stackoverflow
前不久facebook在github上发布了一个c++工具库folly,其中的实现大量的使用了c++ 11的新特性,同时,gcc 从4.3版本开始支持c++ 11, 到现在的版本4.8,已经支持了绝大部分c++ 11的新特性(support list),让我感到时候有必要认真学习一下c++ 11了.关于11引进的新特性概述,已经有很多的文章了,如果你不了解,可以到这里.今天主要来学习1转载 2016-08-31 21:41:41 · 390 阅读 · 0 评论 -
C++11新特性学习笔记
最近学习了C++11的新特性,将学习内容整理下来以巩固记忆,C++11的新特性,可以分为两部分,第一部分是C++11核心语言的特性,第二部分是STL标准库的新特性。学习C++11主要参考了wiki上的一篇文章,在介绍右值引用的时候还参考了MSDN上一篇文章,由于这两篇文章写的时间比较早,和实际有些出入,我的开发环境是win8,vs2012,很多C++11特性还没支持,所以只整理了vs2012已经支转载 2016-08-31 21:53:40 · 388 阅读 · 0 评论 -
C++——模板特化和偏特化
1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL的基础。而STL模板实例中又充斥着大量的模板特化和偏特化。2.模板的定义(1) 类模板定义一个栈的类模板,它可以用来容纳不同的数据类型转载 2016-08-14 11:25:11 · 410 阅读 · 0 评论 -
静态链接库LIB和动态链接库DLL的区别
http://blog.csdn.net/augusdi/article/details/6460415一、 静态链接库与动态链接库区别静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地转载 2016-10-01 20:52:29 · 1749 阅读 · 0 评论 -
从4行代码看右值引用
概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i; 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通过&&我们就可以很方便的绑定右转载 2016-10-06 12:24:16 · 542 阅读 · 0 评论 -
IP地址与无符号整形互转
通过位运算解析IP的原理,其实我们看到IP地址只是一个字符串,这个字符串是由整形数字转化而来的!说白了IP地址就是个数字,下面我们看他的一个具体的转化过程,#include #include #include int main(void){ unsigned int num = 3487979799; int num1 = num - (n转载 2016-06-14 15:56:00 · 1584 阅读 · 0 评论 -
实现智能指针
#include<iostream>using namespace std;class point{public: point(int val) :x(val){} ~point(){ cout << "deconstrutor" << endl; } void set(int val){ x = val; } in原创 2016-06-06 19:29:51 · 346 阅读 · 0 评论 -
C/C++中volatile关键字详解
原文http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language转载 2016-05-25 09:54:08 · 684 阅读 · 0 评论 -
函数对象
函数对象定义重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。class FuncOdject {public: void operator()() { cout << "hello c++!" << endl; }}// 实例化一个对象FuncOdject val;val(转载 2016-05-12 09:28:06 · 278 阅读 · 0 评论 -
C++中如何在指定的内存中创建新对象
在Free store或者是heap中动态创建程序所需对象时,很多人都知道,用 new 就可以了。那么如何在指定的内存空间中创建对象?就比如要在0x320f8该内存地址上动态创建一个int类型,怎么破?C++提供了几种特点来方便实现在预先决定的内存位置构造一个对象的任务。在这些特点中,包括一个特殊形式的new操作符,叫做“定位new”(placement new)操作,以及一个显式的析构处理。使用步转载 2016-05-18 10:44:20 · 8590 阅读 · 1 评论 -
delete 和 delete []的真正区别
我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码:int *a = new int[10];delete a; //方式1delete [] a; //方式2肯定会有很多人说方式1肯定存在内存泄漏,是这样吗?转载 2016-05-19 10:20:00 · 759 阅读 · 0 评论 -
C++中模板的特化与偏特化
1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL的基础。而STL模板实例中又充斥着大量的模板特化和偏特化。2.模板的定义(1) 类模板定义一个栈的类模板,它可以用来容纳不同的数据类型转载 2016-05-31 23:10:50 · 1965 阅读 · 0 评论 -
traits编程技法感悟
转载自 镜中影的技术博客 本文链接地址: traits编程技法感悟) URL:http://blog.csdn.net/linkpark1904/article/details/50790917由于工作学习需要,在研究生阶段主要编程语言还是以C++为主,多少在学习语言的过程中,道听途说c++很高大上,c++是一门四不像的语言,c++学起来很难,用c++做工程的不多等等这之类的话。于转载 2016-06-01 09:48:07 · 846 阅读 · 0 评论 -
String类的实现 三大复制控制函数
#include using namespace std;class String{public: friend ostream& operator<<(ostream& out, const String& str);//友员 String(const char * str = NULL);// 默认参数 String(const String &str); String&原创 2016-05-19 11:46:48 · 1505 阅读 · 0 评论 -
C++11中的string - to_string/stoi
转自 IBM 编译器中国开发团队的《C++11中的string - atoi/itoa》 在C++11中,由于右值引用的引入,常为人所诟病std::string的性能问题得到了很大的改善。另外一方面,我们也可以看到新语言为std::string类增加了很多新的api。比较引人注意的就是std::string的成员函数stoi系列,以及std::to_string全局函数。这两种API虽然很不起眼,转载 2016-02-24 11:50:35 · 34032 阅读 · 1 评论 -
C++中,a++、a+=1、a=a+1、++a 有什么区别?以及效率问题
a++:a先创建自身的一个副本,然后a自增1,最后返回副本的值a+=1: 事实上相当于++aa=a+1: 虽然有点雷同于a+=1,但不同的是此时右值的a和1做相加操作,形成一个副本然后赋值给a,所以有额外操作++a:将a自增1并返回a鉴于a++和++a的差别,C++Primer建议用++a作为for循环的递增量 效率问题:1.在内建数据类型时(即自增表示式的结果没有被使用转载 2016-06-02 21:54:57 · 9541 阅读 · 0 评论 -
减少C++代码编译时间的方法
c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,这样干了一天挺累的, 但是你的老板说你没有产出,结果你被fired, 是不是很怨啊, 如果你早点看到这段文章,你就会比你转载 2016-05-21 16:55:02 · 358 阅读 · 0 评论 -
c++内存池实现
利用C/C++开发大型应用程序中,内存的管理与分配是一个需要认真考虑的部分。本文描述了内存池设计原理并给出内存池的实现代码,代码支持Windows和Linux,多线程安全。内存池设计过程中需要考虑好内存的分配与释放问题,其实也就是空间和时间的矛盾。有的内存池设计得很巧妙,内存分配与需求相当,但是会浪费过多的时间去查找分配与释放,这就得不偿失;实际使用中,我们更多的是转载 2016-06-03 21:28:23 · 550 阅读 · 0 评论 -
C语言变长数组data[0]【总结】
1、前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data[0]结构经常遇到的结构形状如下:struct buffer转载 2016-10-06 17:30:07 · 423 阅读 · 0 评论