Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894649
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-11-04 13:27:36

这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。 boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。 Scott Meye.........【阅读全文】

阅读(1576) | 评论(0) | 转发(0)

发布时间:2014-11-04 13:23:42

按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello.........【阅读全文】

阅读(1325) | 评论(0) | 转发(0)

发布时间:2014-11-04 10:52:26

deadline_timer和socket一样,都用io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。1. 构造函数在构造deadline_timer时指定时间。[cpp] view plaincopyprint?.........【阅读全文】

阅读(6821) | 评论(0) | 转发(0)

发布时间:2014-11-03 21:43:30

1.boost::anyboost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内,最重要的它是类型安全的。有点象COM里面的variant。使用方法:any::type() 返回包装的类型any_cast可用于any到其他类型的转化#include <boost/any.hpp>void test_any.........【阅读全文】

阅读(1465) | 评论(0) | 转发(0)

发布时间:2014-11-03 20:56:46

io_service::work类可以使io_service::run函数在没有任务的时候仍然不返回,直至work对象被销毁。[cpp] view plaincopyprint?void test_asio_nowork()  {      boost::asio::io_service ios;  .........【阅读全文】

阅读(2588) | 评论(0) | 转发(0)

发布时间:2014-11-03 14:03:37

io_service的作用io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。Io_servie的接口提供的接口有run、run_.........【阅读全文】

阅读(1247) | 评论(0) | 转发(0)

发布时间:2014-11-03 13:46:35

1:    io_service 与 strand 的关系是什么?2: strand : /// Provides serialised handler execution.      能够保证线程安全,同时被post 或 dispatch 的方法 不会被并发的执行;   而 io_service 不能保证:&nbs.........【阅读全文】

阅读(2552) | 评论(0) | 转发(0)

发布时间:2014-11-03 11:21:37

1,字符串 到 数值类型的转换2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typename Source>     Target lexical_cast(Source arg); lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简.........【阅读全文】

阅读(903) | 评论(0) | 转发(0)

发布时间:2014-11-02 16:38:28

boost中使用线程和mutex的示例:点击(此处)折叠或打开#include <boost/thread/mutex.hpp>#include <boost/thread/thread.hpp>#include <iostream>boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-.........【阅读全文】

阅读(3018) | 评论(0) | 转发(0)

发布时间:2014-11-02 10:09:50

之前一直看的unix网络编程,使用linux系统调用来创建服务器。而在boost中也同样可以创建服务器,boost对底层的系统调用进行了封装,使用的时候更加面向对象。只需要向相应的对象传递一定的参数即可创建连接:使用的主要的对象如下:client方面:由main出发分别是:boost::asio::ip::tcp::resolver::query m_query("www..........【阅读全文】

阅读(2427) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

tianyashuibin2014-12-08 11:22

Oscarzhao:c++11 中貌似可以

嗯,是的,在c++11中可以

下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
   int a = 1;
           ^

回复  |  举报

Oscarzhao2014-11-26 20:12

tianyashuibin:除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

c++11 中貌似可以

回复  |  举报

tianyashuibin2014-10-23 21:57

除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

回复  |  举报

tianyashuibin2014-10-23 21:39

1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。

回复  |  举报

tianyashuibin2014-10-23 21:32

记住静态成员这样初始化:
C/C++ code

class A
{
public:
   static const int a[3];
};
 
const int A::a[3] = {1,2,3};

回复  |  举报
留言热议
请登录后留言。

登录 注册