C/C++
lycclsltt
这个作者很懒,什么都没留下…
展开
-
C语言中restrict关键字学习
简介:restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访转载 2013-11-17 22:11:22 · 1074 阅读 · 0 评论 -
boost库学习之 date_time库
date_time库是一个全面灵活的日期时间库,提供时间相关的各种所需功能,也是一个比较复杂的库。它支持从1400-01-01到9999-12-31之间的日期计算。使用时包含#include 头文件。引用boost::gregorian;命名空间日期日期date是date_time库中的核心类。以天为单位表示时间点。常用方法 date d1;原创 2015-01-04 20:47:28 · 9675 阅读 · 0 评论 -
boost库学习之 lexical_cast
在C中字符串转换为数值,可以使用atoi()、atof()、atol()等,数值转换为字符串可以使用itoa()、sprintf()等,但itoa与编译器有关,并不是标准函数,而sprintf可能会不安全。使用lexical_cast可以很容易地在数值与字符串之间转换,只需在模板参数中指定转换的目标类型即可。如 int x = lexical_cast("100"); long原创 2015-01-30 20:11:07 · 9520 阅读 · 0 评论 -
boost库学习之 scoped_ptr scoped_array
boost.smart_ptr库提供了六种智能指针:scoped_ptr、scoped_array、shared_ptr、shared_array、week_ptr和intrusive_ptr。说到智能指针,我们会想到c++98标准中的自动指针auto_ptr.auto_ptr获取指针所有权后,离开作用域时自动释放该指针指向的堆内存。也可以转移指针的所有权。auto_ptr ap_a1(new原创 2015-01-30 20:51:15 · 9360 阅读 · 0 评论 -
boost库学习之 noncopyable
c++中定义一个类时,如果不明确定义拷贝构造函数和拷贝赋值操作符,编译器会为我们自动生成这两个函数如class TestClass{public: TestClass(const TestClass&); TestClass& operator=(const TestClass&);};如何防止类的实例被拷贝呢?可以将拷贝构造函数和拷贝赋值操作符定义为privateclass TestC原创 2015-01-30 20:33:58 · 9048 阅读 · 0 评论 -
boost库学习之 pool库
简单来说内存池预先分配了一块大的内存空间,然后在其中使用某种算法高效快速的自定制内存分配。pool库包含四个组成部分,最简单的pool,分配类实例的object pool,单件内存池singleton_tool和用于标准库的pool_alloc.为了使用pool组件,需要包含头文件。操作函数:pool的构造函数接受一个size_type类型的整数request_size,指示每次pool分配内存原创 2015-01-30 20:42:06 · 9723 阅读 · 0 评论 -
boost库学习之 shared_ptr
shared_ptr与scoped_ptr都包装在堆上分配的动态对象,都重载了*和->操作符以模仿原始指针行为,但shared_ptr实现的是引用计数型的智能指针,当没有代码使用时计数为0,此时释放被包装的动态分配的内存。shared_ptr可以被自由地拷贝和赋值。shared_ptr可以安全地放到标准容器中。引用《boost程序库完全开发指南》中的话:“shared_ptr非常有价值、非常重要、原创 2015-01-30 20:47:41 · 9732 阅读 · 0 评论 -
gdb常用调试命令
为了gdb显示调试信息,编译时gcc应加上-g选项,没有-g将看不到函数名、变量名,所替代的是运行时的内存地址。gcc -g(gdb)l 相当于list,每次显示10行源码(gdb)l 10 显示以第10行为中心的10行源码(gdb)回车 表示重复上一次命令(gdb)b 16原创 2014-12-26 15:36:43 · 9095 阅读 · 0 评论 -
vs2012 boost库安装配置
www.boost.org下载boost库,解压打开vs2012的Visual Studio Tools中的VS2012 x86 Native Tools Command Prompt进入boost库目录执行bootstrap.bat,生成bjam.exe工具执行bjam toolset=msvc-12.0 variant=debug,release threa原创 2014-12-26 20:15:05 · 10241 阅读 · 0 评论 -
boost库学习之 timer库
timer是一个很小的库,提供简易的时间度量和进度显示,包括timer、progress_timer、progress_display三个类。不适合高精度的时间测量任务,精度依赖于操作系统或编译器,可提供的最大时间跨度只有几百个小时,不适合大跨度的时间段测量。timer类先来看一下标准库如何计时:#include #include using namespace std;原创 2014-12-27 12:40:48 · 1726 阅读 · 2 评论 -
C++ 仿函数
在我们写代码时有时会发现有些功能的实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个类的成员函数外,就只是实现一个oper原创 2014-06-14 11:17:42 · 1052 阅读 · 0 评论 -
C++中explicit关键字
C++中, 一个参数的构造函数,承担了两个角色。 一个是个构造器 ,一个是个默认且隐含的类型转换操作符。例如 A = a这样的代码, 且恰好a的类型正好是A单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个A的对象。这样看起来很酷, 很方便。 但在某些情况下, 却违背了我们的本意。 这时候就要在这个构造器前面加上explicit修饰, 指定这个构造器只能被明确的调用原创 2014-06-11 23:12:52 · 816 阅读 · 0 评论 -
链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点为了符合大多数人的习惯,从1开始计数,即链表的尾结点是倒数第一个结点,例如一个链表有6个结点,从头结点开始它们依次是1、2、3、4、5、6,这个链表的倒数第3个结点是值为4的结点。原创 2014-06-26 15:26:22 · 630 阅读 · 0 评论 -
gcc中-pthread和-lpthread的区别
用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了,像这样:gcc -c x.c gcc x.o -ox -lpthread 而gcc手册里则指出应该在编译和链接时都增加 -pthread 选项,像这样:gcc -pthread -c x.c gc转载 2013-11-17 23:19:09 · 1105 阅读 · 0 评论 -
c++ stl string类的基本用法
#include "stdafx.h"#include #include using std::cout;using std::cin;using std::endl;using std::string;int _tmain(int argc, _TCHAR* argv[]){ string strWebSite; strWebSite = "www.jiesoon.co原创 2013-11-23 21:53:56 · 1171 阅读 · 0 评论 -
c++ stl学习 传统C字符串用法
#include "stdafx.h"#include #include using std::cout;using std::endl;class JString{public: JString(const char* pszContent); JString(const JString& oString); JString& operator = (const JStri原创 2013-11-23 21:24:03 · 952 阅读 · 0 评论 -
c++ STL string类的查找、替换和删除操作
#include "stdafx.h"#include #include using std::string;using std::cin;using std::cout;using std::endl;int _tmain(int argc, _TCHAR* argv[]){ string strContent = "www.jiesoon.com is a excitin原创 2013-11-23 22:27:06 · 1596 阅读 · 0 评论 -
C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 volatile int i=10; int j = i; ... int k = i; volatil转载 2013-12-09 23:10:22 · 979 阅读 · 0 评论 -
C++ STL智能指针(三)
#include #include using std::cout;using std::cin;using std::endl;using std::auto_ptr;class WebSite{public: WebSite() { cout << "WebSite" << endl; } ~WebSite() {原创 2013-12-25 21:41:22 · 857 阅读 · 0 评论 -
C++ STL 智能指针(二)
构造,赋值,都将产生原生指针所有权的转移,在作用域中应用更加安全,适合#include "stdafx.h"#include #include using std::cout;using std::endl;using std::auto_ptr;class WebSite{public: WebSite(){ cout << "WebSite" << end原创 2013-11-30 23:07:35 · 899 阅读 · 0 评论 -
linux线程同步之互斥锁
当程序中存在多个线程时,如果每个线程使用的变量都是其他线程不会读取或修改的,那么就不存在一致性问题。如果变量是只读的,多个线程访问也不会有不一致问题。但是,当某个线程可以修改变量,而其他线程也可以读取或修改该变量时,为了确保数据存储时不会访问到无效的值,为了避免脏数据,就需要对这些线程进行同步。该程序中每个线程分别对共享变量进行+1并且比较,体现了多线程访问共享资源时读写造成的原创 2014-02-24 21:13:25 · 1048 阅读 · 0 评论 -
linux进程间通信之消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识。对于系统中的每个消息队列,内核维护一个定义在头文件中的信息结构struct msqid_ds { struct ipc_perm msg_perm; /* 相关权限 */ time_t msg_stime; /* 上一次发送时间 */ time_t msg原创 2014-03-11 10:18:57 · 1657 阅读 · 2 评论