- 博客(32)
- 资源 (5)
- 收藏
- 关注
原创 c++左值与右值概念剖析
在c++中左值和右值的概念极易混淆,也最让c++er着急的两个概念,然而,理解它们的不同点是非常重要的。C++98/03和 0x标准中对lvalue和rvalue都有不同,C++98/03的解释如下:lvalueness versus rvalueness is a property of expressions, not of objects.Every expression is
2012-05-08 15:29:41
1648
原创 shared_ptr / unique_ptr不完全类型
std::unique_ptr和std::shared_ptr是由c++最新标准c++11吸收的智能指针,定义在头文件中,关于这两个指针的具体操作和性质请查看具体文档,这里不做详述。先来看下面这段代码:#includestruct s;struct base{ //std::unique_ptr ps;//编译不过 std::shared_ptr ps;};in
2012-05-06 17:16:01
7240
原创 一些bit算法妙用
一 两整形变量的平均值 这个算法利用了一个原理:(x+y) ,((x&y)+(x|y)) ,((x^y)+2*(x&y))这三个表达式的值相等。 对于两个int型的变量x、y。计算其平均值的一般是(x+y)/2 。然而,由于(x+y)有可能会发生溢出,而产生不正确的结果,一个比较隐晦的方法是使用(x&y)+((x^y)/2)。由于C语言不会说明这个转化是否是带符号的,因此这
2012-03-12 15:10:01
1610
翻译 预留位置队列PRQueue:多线程程序中消息输入队列和消息输出队列保持同序
译自: http://accu.org/var/uploads/journals/overload101.pdf 在多线程应用程序中,要求消息输入队列和消息输出队列顺序要求保持一致,而忽略多线程并发处理的顺序,这种情况是比较难处理的。在本文中,作者设计了一种新型解决方案:PRQueue(预留位置队列),较很好的解决这个问题。 PRQueue是使用c++的两个
2012-03-12 13:57:53
3004
原创 设置终端属性,不用回车获取终端输入字符
使用termios(3)及相关函数,适当的设置终端属性,不用回车即可获取终端输入的字符。#include #include int main(){ int c; struct termios oldSet,newSet; tcgetattr(fileno(stdin),&oldSet); newSet = oldSet; newSet.c_lflag &= ~ECHO;
2012-02-16 19:51:59
2268
原创 Delete 多态类数组
下面这段代码:#includeclass Base{ public: Base(){} virtual ~Base(){}};class Derive : public Base{ public: Derive():i(1){} virtual ~Derive(){} private: int i;};int m
2012-02-13 21:34:04
836
原创 vim常用操作命令
一 VIM打开文件操作:sp file1 分屏打开文件:vsp file1 水平分屏打开文件:e file1 在当前窗口中打开文件使用ctrl + w + 方向键进行切换打开ftp服务器上的文件::e ftp://192.168.10.76/abc.txt保存(如果不存在则创建)::w ftp://192.168.10.76/abc.txt读取::r ftp
2012-01-06 16:15:50
2259
原创 linux网络编程之shutdown() 与 close()函数详解
1.close()函数#includeint close(int sockfd); //返回成功为0,出错为-1. close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数,然而TCP将尝试发送已排队等待发送到对端的任何数据,发送完毕后发生的是正常的TCP连接终
2012-01-05 20:28:15
45756
12
原创 linux下网络编程之相互转化函数对
一 IP地址的网络字节序长整形表示 与 点分十进制字符串表述的相互转化函数inet_ntoa/inet_addrinet_aton(注:inet_addr函数出错是返回INADDR_NONE(255.255.255.255),即IP地址(255.255.255.255)不能由这个函数来转化)以下这对函数使用与IPv4和IPv6inet_ptoninet_ntop二 网络
2012-01-04 20:54:37
1137
原创 FAQ 站点
一 C FAQ 英文版地址:http://c-faq.com/中文版翻译下载地址:http://c-faq-chn.sourceforge.net/ 二 C++ FAQ英文版:http://www.parashift.com/c++-faq-lite/index.html中文版:http://www.sunistudio.com/cppfaq/index.html英文
2012-01-04 09:57:55
918
原创 linux网络编程系列之connect函数详解
在讲解套接字编程函数之前,有必要对socket编程的两个不可或缺的结构体进行说明。第一个结构体式struct sockaddr.。这个结构为许多类型的套接字储存套接字地址信息: #includestruct sockaddr { uint8_t sa_len; unsigned short sa_family; /* 地址家族, AF_xxx */ ch
2012-01-02 21:36:50
12955
原创 vim配置文件
贴一下我的.vimrc,部分带注释set syntax=onset tabstop=4set nobackupset cindent "有时中文会显示乱码,用一下几条命令解决 let &termencoding=&encoding set fileencodings=utf-8,gbk"默认缩进4个空格大小 set shiftwidth=4
2011-12-23 11:00:22
935
转载 C 编程最佳实践
此文转载自IBM官网:http://www.ibm.com/developerworks/cn/linux/l-bppc/简介本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希望您会喜欢其中的一些并在您的编程或移植项目中使用它们。
2011-12-21 14:35:27
723
转载 VIM 快速参考指南
转载自:http://vimcdoc.sourceforge.net/doc/quickref.html#Q_paQUICKREF*quickref.txt* For Vim version 7.3. 最近更新: 2011年5月 VIM REFERENCE MANUAL by Bram Moolenaar
2011-12-17 19:36:00
3197
原创 CRC算法的代码实现
以下代码是lighttpd中CRC算法的代码实现:#ifndef __crc32cr_table_h__#define __crc32cr_table_h__#ifdef HAVE_CONFIG_H# include "config.h"#endif#include #if defined HAVE_STDINT_H# include #elif d
2011-12-16 14:47:29
1214
转载 linux下网络工具之netstat精析
功能说明:显示网络状态。 语 法:netstat [-acCeFghilMnNoprstuvVwx][-A][--ip] 补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。 参 数: -a或--all 显示所有连线中的Socket。 -A或-- 列出该网络类型连线中的相关地址。 -c或--continuous 持续列出网络状态。 -C或--ca
2011-12-15 20:47:31
758
转载 linux下网络工具之tcpdump精析
tcpdump采用命令行方式,它的命令格式为:tcpdump [-adeflnNOpqStvx] [-c 数量] [-F 文件名] [-i 网络接口] [-r 文件名] [-s snaplen] [-T 类型] [-w 文件名] [表达式](1).tcpdump的选项介绍:-a 将网络地址和广播地址转变成名字;-d 将匹配信息包的代码以人们能够理解的汇编格式给出;-dd
2011-12-15 20:45:19
963
原创 #define的一些不常见的用法
一 #define后含有 ## 符号,如以下代码所示:1.#define DEFAULT_COMMAND_REGISTER(command_request,command,factory) \ private: \ void_t __##command_request##_command##_register() \ { \ (void_t)Hyer::
2011-12-14 15:25:35
807
原创 c/c++ extern的使用
(1)C++中引用C语言中的函数和变量 在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况。产生这种情况的原因是C++在编译的时候为了解决函数重载及函数多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C则不会,因此会造成链接时找不到对应函数的情况,此时就需要用extern “C”对调用的C函数来进行修饰。如果C
2011-12-13 19:57:08
505
转载 将类的成员函数指针转化为一般的函数指针的方法
以下代码实现的功能是void*(class::*)(void*) 转化为void*(*)(void*) 即将类的成员函数指针转化为一般的函数指针#include #include template T supercast(F f){ union FT { T t; F f; }; FT ft; ft.f=f; return ft
2011-12-11 21:03:24
3260
1
转载 跨win32,linux的写日志代码
下面我收集到的跨跨win32,linux的写日志代码#include #include #include #ifdef WIN32 #include #include #else #include #include #include #define CRITICAL_SECTION pthread_mutex
2011-12-11 19:44:09
1135
原创 c++常见类型转化方法
一 const_cast const_cast通常用来将对象的常量性进行移除,即将const 对象转化为非const对象。它也是惟一有此能力的c++类型操作符。 二 dynamic_cast dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast
2011-12-09 23:20:47
646
原创 宏定义中Do{...}while(0)的作用
我们在有些代码中特别是linux内核源码中会见到这样的宏定义形式:#define MACRO_DATA do{........}while(0);这个do{...}while(0),表达式内一般会封装多个语句。那么如此的定义形式有什么作用呢?1.如果我们如此定义 #define FOO(x) foo(x); bar(x) if (condition) FOO(
2011-12-09 21:39:24
595
原创 ptr_fun,mem_fun,mem_fun_ref 浅析
一 ptr_fun:list widgetPtrs;bool isInteresting(const Widget *pw);list::iterator i = find_if(widgetPtrs.begin(), widgetPtrs.end(), not1(isInteresting)); // 错误!不能编译list::iterator i = find_if(widge
2011-12-09 20:32:15
2288
1
转载 c++中类型与对象同名的问题
使用gcc3.4.2和vc++8.0(sp1)1.int main(){ int( int ); // error}而struct foo {};int main(){ foo( foo ); // good}2. struct foo {};int main(){ foo a( void ); // good
2011-12-09 16:44:33
1515
转载 static精析
此文来自CU的一篇精华帖,将static的知识总结的非常全面到位,故转来与大家分享。通常理解static只是指静态存储的概念,事实上在c++里面static包含了两方面的含义。 1)在固定地址上的分配,这意味着对象是在一个特殊的静态区域上创建的,而不是每次函数调用的时候在堆栈上动态创建的,这是static的静态存储的概念。 2) 另一方面,static能够控制对象对
2011-12-08 21:50:37
547
原创 关于零长数组
typedef struct { int head; int size; char reply; char data[0];} packet;这里的char data[0] 即为零长数组;其不占用任何空间,甚至是一个指针的空间都不占;其主要是作为扩展数组用的,我们可以这样使用它,packet* cmd
2011-12-08 21:37:04
831
原创 c++模板的一些知识点总结
一.1 可以为类模板的模板参数提供默认参数,函数模板却不行。2可以为类模板进行偏特化,而函数模板却不行。二.模板参数1 类型(可以是内建类型或是用户自定义类型)2 无类型参数(整数,指针,某些静态实体的引用 例:bitset)3 其他模板三.关于typename若一个模板代码内部的某个类型被模板类型参数所限定,则必须使用关键字typename作为前缀进行声明(构造函
2011-12-08 21:31:23
2278
转载 linux下各文件和文件夹作用的详细说明
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin
2011-12-08 16:37:35
935
转载 Boost下载安装编译配置使用指南(含Windows和Linux)
转自:http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html理论上,本文适用于boost的各个版本,尤其是最新版本1.47.0;适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,VS2010,gcc,C++ Builder等。先总结一下Windows系统。
2011-12-08 16:02:59
612
原创 c++宽字符和多字节字符相互转化类
多字节字符(multibyte character):每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定。 宽字符:对宽字符的支持其实是ANSI C标准的一部分,用以支持多字节表示一个字符。宽字符和Unicode并不完全等同,Unicode只是宽字符的一种编码方式。在ANSI中,一个字符(char)的长度为一个字节(Byte)。使用
2011-12-08 15:15:14
3479
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人