Linux后台服务器编程。
发布时间:2014-11-04 13:27:36
这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。 boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。 Scott Meye.........【阅读全文】
发布时间:2014-11-04 13:23:42
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello.........【阅读全文】
发布时间: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?.........【阅读全文】
发布时间:2014-11-03 21:43:30
1.boost::anyboost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内,最重要的它是类型安全的。有点象COM里面的variant。使用方法:any::type() 返回包装的类型any_cast可用于any到其他类型的转化#include <boost/any.hpp>void test_any.........【阅读全文】
发布时间: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; .........【阅读全文】
发布时间: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_.........【阅读全文】
发布时间:2014-11-03 13:46:35
1: io_service 与 strand 的关系是什么?2: strand : /// Provides serialised handler execution. 能够保证线程安全,同时被post 或 dispatch 的方法 不会被并发的执行; 而 io_service 不能保证:&nbs.........【阅读全文】
发布时间: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 的,其原理也是相当的简.........【阅读全文】
发布时间: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-.........【阅读全文】
发布时间:2014-11-02 10:09:50
之前一直看的unix网络编程,使用linux系统调用来创建服务器。而在boost中也同样可以创建服务器,boost对底层的系统调用进行了封装,使用的时候更加面向对象。只需要向相应的对象传递一定的参数即可创建连接:使用的主要的对象如下:client方面:由main出发分别是:boost::asio::ip::tcp::resolver::query m_query("www..........【阅读全文】
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;
^
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};