- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 类的直接构造和拷贝构造
先看代码:#include using namespace std;class A{public: A(int k): m_k(k) { } A(const A&a): m_k(a.m_k) { cout << "copy ctor" << endl; }private: int m_k;};int main(){ A a1(1);
2012-02-16 13:03:27
862
原创 模拟C++11的新关键字decltype
只上代码了,尽在不言中吧:#include #include #include #include using namespace std;template struct decltype_t { typedef T type; }; #define DECLTYPE(expr) decltype_t::type int main(){ std::map m
2012-01-20 21:12:41
1314
原创 完成端口GetQueuedCompletionStatus()返回错误,怎样获得真正的错误代码
GetQueuedCompletionStatus()返回错误,说明I/O失败。此时调用GetLastError()得到的往往是ERROR_NETNAME_DELETED(64),WSAGetLastError()也一样,这显然不是真正的错误代码,那么怎么得到真正的错误代码呢?给出下面的代码:int YourIOCPClass::GetSockError(WSAOVERLAPPED* pW
2012-01-12 17:01:18
5737
原创 调用closesocket()背后发生的事
应用层代码想要关闭一个TCP连接可以直接调用closesocket(),但是这个函数的行为并不“单纯”,只有了解closesocket()背后的故事,才能对关闭TCP连接有正确的认识。首先明确一点:任何情况下,调用closesocket之后,socket句柄立即失效(一种情况除外,见下文),再对该socket进行操作的API都会失败。但是socket句柄对应的系统资源不一定立即释放,由内核控制
2012-01-12 13:38:29
12318
原创 TCP连接的关闭
这是我自己总结的TCP连接关闭是几种情形,不保证正确性与全面性,假定A端和B端通信:1、双方四次握手的过程;2、A端半关闭,经过一段时间,B端数据发送完毕并被A端确认,B端半关闭,A端进入TIME_WAIT状态;3、A端或B端主动直接RST;4、保活定时器启动:B端停止响应(路由故障,对方主机崩溃、重启,网线被拔等等),迫使A端保活定时器启动,2个小时(具体由协议栈实现)之后B端仍
2012-01-12 10:46:04
1549
原创 有符号数的向左位移运算
今天忽然想到的,有符号数的左移是怎么处理的。查了一些资料,原来左移就是简单的把数字的2进制表示的最左边若干位抛弃掉,同时把剩余的位向左移动,空出来的位置用0补上即可。有符号数、无符号数都是这样的。特别的,有符号数左移之后的正负取决于左移之后的符号位,就是说有符号数左移之后的正负是不确定的,和左移的位数有关系。还有,float和double是不能做位移运算的(这不废话嘛!)。
2012-01-09 19:43:27
5039
原创 配接器ptr_fun的一点增补
ptr_fun的作用是什么?就是把函数(函数的参数最多有两个,返回值类型任意,包括void)转成函数对象,并使该函数对象可配接。当和bind1st或者bind2nd结合使用的时候,ptr_fun作用的函数的参数类型会有限制:不能是引用类型
2012-01-09 12:21:56
908
1
原创 无聊的细节:指针、引用、右值
先看代码:int i;int*& ii = &i;我想定义一个int*的引用ii。但是上面的代码不能编译,因为&i是个右值,不能被引用(只能引用左值嘛),只好加上const:int i;int*& ii = &i;int* const &ii = &i;OK了,const只能放在这里,下面的代码不能编译(为什么?):int i;const int*& ii =
2012-01-05 10:49:33
658
原创 如何把string的元素逆序呢?
论坛里见到这个问题:如何把string的元素逆序?我直接想到的是利用反向迭代器reverse_iterator:rbegin()和rend():string str1("1234567890");string str2(str1.rbegin(), str1.rend());这样的话逆序string就保存在str2里了。要是想保存在原string呢,这样:string str
2012-01-03 11:32:12
12551
原创 cin的错误标记和缓冲区清空
先看下面的代码:vector intVtr;intVtr.insert(intVtr.end(), istream_iterator(cin), istream_iterator());上面的代码就是从标准输入中得到int型数字,并把值插入到intVtr中。当遇到非数字字符时,输入结束。问题是,现在我要继续从标准输入读进int数字并插入intVtr结尾(也可以在其他位置,本文假定
2011-12-31 11:03:14
2557
1
原创 IOCP编程注意事项
虽说我的昵称是EasyIOCP,但是用好IOCP还是不容易的,有很多要注意的地方,长话短说(不涉及细节): 1、每个连接同时最好只有一个待决的WSARecv。IOCP不保证多个待决WSARecv情况下先投递的WSARecv就一定会先得到完成通知。因此,多个待决WSARecv可能导致数据乱序,无谓增加代码复杂性。 2、投递0长度缓冲区的WSARecv可以不
2011-04-26 16:16:00
7460
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人