自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

永无止境

今日的科学必将成为明日的常识,莫要停滞不前!

  • 博客(38)
  • 收藏
  • 关注

原创 两个C++类的交叉引用和同步改变

实际编程中有时会碰到两个类之间交叉引用的问题,比如一个类A含一个类B的指针成员,一个类B含类A的指针成员,两个类相互“关联”;而且更重要的是:对类B的任意修改应该同时改变A中的B指针指向的值,同理适用于类A。良好的设计应当可以通过任意一个类的接口来同时改变A、B两个对象,而不必调用两个类的对应接口。boost::enable_shared_from_this提供了这个能力代码:A.h:

2015-03-16 14:48:55 1290

原创 控制vs调试器的显示

1、整型变量的其他进制显示:有如下定义:int i = 0xff;在调试窗口中,你只能看到:默认只是显示整型的十进制。现在,欲显示i的二进制、八进制、十六进制,可以这样做:添加i的多个监视,在变量后面分别写上,b     二进制显示,x     十六进制显示,o    八进制显示2、将字符指针以字符数组形式显示char

2015-02-12 11:54:01 2008 1

原创 代码风格、命名规范

我的代码风格:1、   大括号单独一行,内容只有一行的可以写在一行2、   小括号前后不加空格3、   逗号之后空一格4、   for中的每个分号后空一格5、   不在if、for、while语句中的=、+、-、复合赋值+=前后各空一格在语句中的看情形:单次出现可空,多次出现一般不空6、   复合比较>=、==看情况:单次出现可空,多次出现一般不空7、   *、/、

2015-02-09 15:14:39 639

转载 Visual Studio, GCC, Clang, Intel 对 C++11 特性的支持一览表

距离我上次对C++11支持的不同编译器的比较已经有大半年了。这次我来根据这些预览版的编译器的文档来看下它们是如何堆砌起来的。GCC的下个版本是4.8,以及Clang即将到来的版本是3.3 。如果你使用Visual Studio 2012,你可以安装2012年11月更新支持C++11额外特征的体验版CTP。 我也对V.13.0的Inte

2015-02-05 15:55:26 991

原创 c++类的内存结构(单继承)

关于c++类的内存的文章在网上有许多,但是,大多是一段段代码和说明,偶尔有图文并茂的,总觉不是很详细,没有一目了然之感觉并且大部分也没有涉及虚析构,也没有说明访问标号的影响(虽然事实是没有影响)。而这块内容对于理解多态、重写、继承的构造和析构又是足够重要的。终于下定决心,自己动手,在参考多方资料后,终有此文。一、基类内存结构1.1 不带虚函数、虚析构的基类:class Ba

2015-01-31 11:23:00 881

原创 一种容易出错的构造函数调用

对于默认构造函数,知道应该这么用:classType objectName;估计你知道不能classType objectName();因为这是函数声明而不是类对象定义,很多资料都已提及。但是稍微变化一下,就未必一下子反应过来了,看下面这个例子:struct IntTest{ int ival;};int _tmain(int argc, _TCHAR* argv[])

2015-01-31 10:21:44 678 1

转载 函数编写规范

1 :对所调用函数的错误返回码要仔细、全面地处理   2 :明确函数功能,精确(而不是近似)地实现函数设计   3 :编写可重入函数时,应注意局部变量的使用(如编写C/C++ 语言的可重入函数时,应使用auto 即缺省态局部变量或寄存器变量) 说明:编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。  4 :编

2015-01-21 10:59:58 614

原创 reference :引用

#includeusing namespace std;void test1();void test2();int _tmain(int argc, _TCHAR* argv[]){ int i(3); double d; const int ci(4); // 1、一般特性 // int &r; // 引用定义时必须初始化 int &r = i; // 引用

2015-01-15 19:09:00 528

转载 【c++11】变长参数模板

转载自http://blog.csdn.net/aspnet_lyc/article/details/30980965[cpp] view plaincopyprint?template typename ... ARGS>  void fun(ARGS ... args)  首先明确几个概念1,模板参数包(template paramete

2015-01-13 18:49:58 2195

转载 【c++11】Lambda表达式

转载自http://blog.csdn.net/aspnet_lyc/article/details/30972863lambda表达式可以用于创建并定义匿名的函数对象,以简化编程工作Lambda的语法如下:[函数对象参数](操作符重载函数参数)->返回值类型{函数体}[]内的参数指的是Lambda表达式可以取得的变量。(2)函数中的param就是指函数可以得到在Lam

2015-01-13 18:47:42 518

转载 【c++11】范围for循环

参考:http://blog.csdn.net/aspnet_lyc/article/details/30971195#include #include #include #include #include #include using namespace std;struct Test{ int i; int j;};int main(){ map ms

2015-01-13 18:43:39 477

转载 【c++11】tuple

参考:http://blog.csdn.net/aspnet_lyc/article/details/30980465我们在C++中都用过pair.pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同.pair可以使用make_pair构造[cpp] view plaincopyprint?pairint, string> p = make_pai

2015-01-13 18:32:09 1006

原创 【c++11】override(重写)与final(最终)

#include "stdafx.h"#include // 标示符含义:// override,表示此虚函数必定“重写”了基类中的对应虚函数。// final,表示此虚函数已处在“最终”状态,后代类必定不能重写这个虚函数。// 编译器将帮你检查是否“必定”class B{public:// virtual void func() override // error! 指定

2015-01-13 18:22:26 11626 1

原创 【c++11】static_assert: 静态断言 type traits:类型特征

static_assert提供一个编译时的断言检查1、static_assert与assert的不同:    assert(表达式):运行时断言,表达式为false,在运行时打印固定的错误信息,并终止程序。    static_assert(表达式,“想让编译器显示的出错信息”):编译时断言,表达式为false,在编译时显示给定的出错信息。    表达式为true,两者都不做任何事

2015-01-13 17:46:47 2412 1

原创 【c++11】 enum class: 强类型枚举

#include int _tmain(int argc, _TCHAR* argv[]){ { enum Numbers {One, Two, Three}; // enum Options {None, One, All}; // error! 名字冲突:"One"重定义// int i = One; } // 普通枚举常量作用域提升至外围(main函数之内)并且可以

2015-01-13 17:36:36 1277

原创 【c++11】非成员begin() 、end()

#include #include #include int _tmain(int argc, _TCHAR* argv[]){ // 非成员begin()\end()使数组的使用变得像std容器一般,再也不用繁琐地求数组长度了 // 调用方式:std::begin(数组名)、std::end(数组名) // 返回值分别标示了数组的开始以及越界位置的“迭代器” int a[] =

2015-01-13 17:29:26 3529

原创 【c++11】 decltype

主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。正如sizeof操作符一样,decltype亦不需对操作数求值规则:若表达式e指向一个普通变量或函数参数,那么返回类型即为该变量(或参数)的“声明类型”;若e是一个左值,则decltype(e)将返回T&,其中T为e的类型;若e是一个右值引用,则返回值为T&&;若e是一个

2015-01-13 17:02:15 597

转载 【c++11】 auto

C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断    auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。[cpp

2015-01-13 16:42:44 464

转载 【C++11】nullptr

1. 引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。1.1 NULL在C中的定义在C中,习惯将NULL定义为void*指针值0:[cpp] view plai

2015-01-13 16:36:23 823

转载 C++11新特性

C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百科不是知道是台湾还是香港人翻译的然后由工具转换成简体中文的,有些术语和语言习惯和大陆程序不一样! 我决定结合这两个版本按照我自己的习惯把这篇文章整理到我的博客中.分享给关注我和关注C++11的朋友们.

2015-01-13 13:19:57 528

原创 容器insert、erase操作引起迭代器失效问题

// insert、erase操作引起迭代器失效问题#include "stdafx.h"#include #include #include #include using namespace std;void print_list(const list& l){ list::const_iterator it; for(it=l.begin(); it!=l.end()

2015-01-08 18:07:40 1236

原创 boost::shared_ptr在类和容器中使用

#include "stdafx.h"#include #include #include #include using std::vector;using std::cout;using std::endl;using std::ends;// 成员全部是内置类型,默认构造函数将其全初始化为0struct Test{ int i; double d; int* p

2015-01-06 17:47:56 699

原创 使用boost::property_tree::ptree读写ini文件

// 参考资料:http://www.cnblogs.com/lidabo/p/3906069.html// http://blog.csdn.net/ufe_1/article/details/8032089#include "stdafx.h" #include #include #include int main() { boost::property

2014-12-27 10:40:32 5733

转载 BOOST_TYPEOF和BOOST_AUTO

头文件里定义了两个宏:BOOST_TYPEOF和BOOST_AUTO,分别用于仿真C++新标准的typeof和auto关键字,可以在编译期自动推导表达式的类型。它们不仅能够推导C++语言内建的int、double、数组、函数指针等等类型,也支持标准库中的容器类型,使程序员再也不需要写复杂的类型定义就能够轻松声明变量。这两个宏完全模仿了typeof和auto关键字的用法,除了因为宏的语法

2014-12-27 10:12:34 556

转载 boost::noncopyable

// 参考资料:http://blog.csdn.net/huang_xw/article/details/8248960#include "stdafx.h"#include // 除非自定义复制、赋值成员(但这样就不应该派生自boost::noncopyable)// 否则不允许复制、赋值,对应成员函数在boost::noncopyable类中为privateclass mycl

2014-12-27 10:05:58 537

原创 boost::serialization::singleton单例的使用方式

#include "stdafx.h"#include #include #include // 使用方式1:模板参数方式class CTest:public boost::noncopyable // 不能复制、赋值{public: void Set(int i){ m_val = i; } void Print() const{ std::cout<<m_val<<std:

2014-12-26 14:10:59 6114

原创 boost::condition的使用

代码来自:http://stlchina.huhoo.net/twiki/bin/view.pl/Main/BoostThread// boost_thread之条件变量// http://stlchina.huhoo.net/twiki/bin/view.pl/Main/BoostThread #include "stdafx.h"#include #include #in

2014-12-26 11:27:15 1052

原创 BOOST_FOREACH缺陷

以下来自手册:缺陷本节描述 BOOST_FOREACH 中的一些常见的缺陷。 带逗号的类型 由于 BOOST_FOREACH 是一个宏,它必须刚好有两个参数,并以一个逗号分隔它们。这并不总是很方便,尤其当循环变量的类型是一个模板的时候。考虑一下对std::map 进行迭代:std::mapint,int> m;// 错误!BOOST_FOREACH 宏参

2014-12-26 09:57:53 1273

原创 boost::thread的简单应用

// boost_thread.cpp : 定义控制台应用程序的入口点。// thread是一个跨平台的线程封装库// 参考资料:http://blog.csdn.net/zhuxiaoyang2000/article/details/6588031// http://blog.csdn.net/gitar520/article/details/7694984// http://blog.

2014-12-25 17:28:50 516

原创 boost中的condition_variable (条件变量)的使用

代码基本来自boost手册,进行了稍微的修改和备注#include #include using std::cout;using std::endl;boost::condition_variable cond; // 条件变量boost::mutex mut; // 互斥量,使用他来进行线程同步bool data_ready; // 公共对象void process_da

2014-12-25 17:22:24 5074

原创 vs在项目中去掉预编译头,去掉自动生成的stdafx.h等文件

以VS2012为例。项目建好后去掉预编译头:新建项目时按默认方式已经选择了预编译,在后期要如何取消或关闭预编译呢?项目---->属性---->配置属性---->C/C++---->预编译头---->创建/使用预编译头选择不使用预编译头,而后可以手动删除自动生成的多余头文件,再改变main函数的声明int_tmain(intargc,_TCHAR*argv[]);为int m

2014-12-22 18:54:41 31214

原创 类中指针成员的内存分配和初始化

指针是出现错误的一大来源,如果在类中定义指针成员,在使用过程中必须十分小心;如果在使用类的过程中采用动态分配内存的方式,其问题似乎变得愈加复杂。先定义一个测试类:class Cptr{public: std::vector GetPtr() { std::vector vec; BOOST_FOREACH(int i, IntVec) {

2014-12-20 15:39:09 3273

原创 boost::asio socket同步实现聊天示例

客户端:client#include #include using namespace boost::asio;int main(int argc, char* argv[]){ // 所有asio类都需要io_service对象 io_service iosev; // socket对象 ip::tcp::socket socket(iosev); // 连接端点,

2014-12-20 15:17:44 935

转载 使用enable_shared_from_this

使用enable_shared_from_this说明The header defines the class template enable_shared_from_this. It is used as a base class that allows a shared_ptr to the current object to be obtained from within a

2014-12-20 15:13:09 612

转载 boost::ASIO的异步方式

嗯?异步方式好像有点坐不住了,那就请异步方式上场,大家欢迎...大家好,我是异步方式和同步方式不同,我从来不花时间去等那些龟速的IO操作,我只是向系统说一声要做什么,然后就可以做其它事去了。如果系统完成了操作, 系统就会通过我之前给它的回调对象来通知我。在ASIO库中,异步方式的函数或方法名称前面都有“async_” 前缀,函数参数里会要求放一个回调函数(或仿函数)。异

2014-12-20 15:10:24 2091

原创 boost asio异步读写网络聊天室【官方示例】

//// chat_message.hpp// ~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accom

2014-12-20 14:50:33 3462

转载 VS项目瘦身:VS2010和VS2012中关于ipch文件夹和.sdf文件的设置

ipch:  Intellisense Precompiled Header Filesdf: SQL Server Compact Edition Database File用过VS2010和VS2012的肯定知道,这两个东西占了很大空间,从而导致项目文件夹庞大,给磁盘空间造成了压力。从网上搜索后,得到解决方法,整理如下供查阅:1. 方法1 使用回退位置(推荐)该方法是将上述

2014-12-18 19:59:50 734

原创 在VS上使用外部库:包含路径及环境变量设置

工欲善其事,必先利其器!我的第一篇博客,就从最基础的东西开始:系统环境变量设置和vs编译器的包含路径在参考了网上的一些资料后,把它整理如下要使用第三方提供的库,我们需要:一、设置环境变量:环境变量是属于操作系统的,而不是某个具体编译器的,环境变量的设置是全局有效的以win xp系统系统为例:我的电脑——右键——属性——高级点开环境变量:这里有两个,上一个是管

2014-12-17 20:01:37 12859 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除