随笔分类 -  C/C++ Language

摘要:独立博客链接:http://www.keepsimply.org/2012/08/18/deep-explore-c-va-arg/ 作者:独酌逸醉时间:2012.08.18 一、基础部分1.1 什么是可变长参数可变长参数:顾名思义,就是函数的参数长度(数量)是可变的。比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的。下面是 printf 函数的声明:int printf ( const char * format, ... );可变参数函数声明方式都是类似的。1.2 如何实现C语言可变参数通过三个宏(va_start、va_end、va_arg)和一个类型(va 阅读全文
posted @ 2012-08-18 15:07 独酌逸醉 阅读(23610) 评论(5) 推荐(6) 编辑
摘要:原文链接:http://www.keepsimply.org/2012/07/11/cpp-vtable/作者:独酌逸醉时间:2012.07.11声明: 本文内容由自互联网资源(见参考资料)、个人的一些 C++ 学习感悟、个人实践整理而成。文章仅以技术学习和交流为目的。如果您发现了文中的错误,或者您有的不同的见解,可以给我留言或者给我发邮件,我们共同探讨。如果您觉得我的文章侵犯到您的权益,请联系我(chinajiezhang@gmail.com),以便我做相应的处理。最后,如需转载,可不必标明出处。但一定要全文转载,保证参考链接的完整性,这是对别人写作的基本尊重。谢谢合作!写博缘由: 1... 阅读全文
posted @ 2012-07-11 16:37 独酌逸醉 阅读(16140) 评论(2) 推荐(6) 编辑
摘要:原帖链接:http://www.keepsimply.org/2012/07/06/in-c-arrays-why-is-this-true-a5-5a/作者:独酌逸醉时间:2012.07.05声明:翻译仅以技术学习和交流为目的,如需转载请务必标明原帖链接。来源:http://stackoverflow.com/questions/381542/in-c-arrays-why-is-this-true-a5-5a水平有限,如有翻译不当,欢迎探讨、批评与指正。帖子内容:Dinah: Joel 在Stack Overflow podcast #34中指出,在C程序设计语言(aka: K&R 阅读全文
posted @ 2012-07-06 17:43 独酌逸醉 阅读(959) 评论(0) 推荐(0) 编辑
摘要:C++虚函数表解析——陈浩operator newset_new_handlerubuntu 下 crossFtp 安装__stdcall与__cdcel区别 阅读全文
posted @ 2011-07-02 11:27 独酌逸醉 阅读(492) 评论(0) 推荐(0) 编辑
摘要:1 头文件 所有容器有含有其各自的迭代器型别(iteratortypes),所以当你使用一般的容器迭代器时,并不需要含入专门的头文件。不过有几种特别的迭代器,例如逆向迭代器,被定义于<iterator>中。2 迭代器类型 迭代器共分为五种,分别为:Input iterator、Outputiterator、Forwarditerator、Bidirectionaliterator、Random accessiterator。2.1 Input(输入)迭代器 只能一次一个向前读取元素,按此顺序一个个传回元素值。表2.1列出了Input迭代器的各种操作行为。Input迭代器只能读取元素 阅读全文
posted @ 2011-06-25 10:56 独酌逸醉 阅读(3520) 评论(2) 推荐(1) 编辑
摘要:C++ 优先级队列(priority_queue) 优先级队列顾名思义是根据元素的优先级被读取,接口和queues非常相近。程序员可以通过template参数指定一个排序准则。缺省的排序准则是利用operator< 形成降序排列,那么所谓“下一个元素”就是“数值最大的元素”。如果同时存在若干个数值最大的元素,无法确知究竟哪一个会入选。头文件:<queue>在文件 <queue> 中,class priority_queue 定义如下:namespace std { template < class T , class Container = vector&l 阅读全文
posted @ 2010-10-31 17:46 独酌逸醉 阅读(24081) 评论(0) 推荐(2) 编辑
摘要:// file: 6numeric.cpp#include <numeric>#include <vector>#include <fucntional>#include <iostream>#include <iterator> // ostream_iterator#include <algorithm>using namespace std;int main(){ int ia[5] = {1,2,3,4,5}; vector<int> iv(ia,ia+5); cout << accumul 阅读全文
posted @ 2010-08-19 17:10 独酌逸醉 阅读(1256) 评论(1) 推荐(0) 编辑
摘要:C/C++输入输出流总结前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终于有点时间了,决定找本书,好好整理一下,和大家共享。C++ I/OC++支持两种I/O,第一种是从C语言继承来的,一种是由C++定义的面向对象I/O系统。1、int getchar(void);返回一个整数值,也可以指定这个值为char变量,因为这个字符包含于低位字节中(高位字节通常为0),如果有错,getchar()返回EOF。但是他有一个潜在的问题,正常情况下,getchar()缓存输入,直到键入了回车键(这个大家应该深有体会,就是getchar()貌似只认识回车键,原来是这个原 阅读全文
posted @ 2010-08-19 09:22 独酌逸醉 阅读(25053) 评论(1) 推荐(4) 编辑
摘要:C++类型转换运算符(TypeConversionOperators)1.static_cast将一个值以合逻辑的方式转换。着可以看做是"利用原值重新构造一个临时对象,并在设立初值的时候使用类别转换"。唯有当上述的类型转换有所定义,整个转换才会成功。所谓的"有所定义",可以是语言内建规则,也可以是程序员自定的转换动作。eg:#include <iostream>using namespace std;int main(){ float f = 100.555; cout << static_cast<int>(f)&l 阅读全文
posted @ 2010-08-19 09:21 独酌逸醉 阅读(2563) 评论(0) 推荐(0) 编辑
摘要:今天我对这段代码产生了质疑:operatordouble(){returnstatic_cast<double>(sum)/static_cast<double>(num);}我感觉应该是这样:doubleoperatordouble(){returnstatic_cast<double>(sum)/static_cast<double>(num);}于是我就在csdn上发了一个贴问了问,经过zhangweiit,mstlq,djjlove_2008,taodm(非常感谢他们)的指点后明白了这是C++的语法规则,我居然不知道。于是我翻开了久违了的 阅读全文
posted @ 2010-08-19 09:20 独酌逸醉 阅读(2097) 评论(0) 推荐(3) 编辑
摘要:C++错误:\Page499\main.cpp|15|error:nomatchingfunctionforcallto'transform(__gnu_cxx::__normal_iterator<char*,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,__gnu_cxx::__normal_iterator<char*,std::basic_string<char,std::char_traits<char>,std: 阅读全文
posted @ 2010-08-19 09:16 独酌逸醉 阅读(3176) 评论(4) 推荐(0) 编辑
摘要:strings存在三种“大小”:1、size()和length() 返回string中现在的字符个数。上述两个函数等效。成员函数empty()用来检验字符数是否为0,亦即字符串是否为空。你应该优先使用该函数,因为它比length()或size()来得快。也就是说,使用if(s.empty()==true)而不使用if(s.size()==0)(笔者注)2、max_size() 此函数返回一个string最多能够包含的字符数。一个string通常包含一块单独内存区块内的所有字符,所以可能跟PC机器本省的限制有关系。返回值一般而言是索引型别的最大值减1。之所以“减1”有两个原因:(a)最大值本身是 阅读全文
posted @ 2010-08-19 09:16 独酌逸醉 阅读(22265) 评论(1) 推荐(2) 编辑
摘要:allocator::rebind 看侯捷先生的《STL源码剖析》,第二章将空间配置器中提到allocator::rebind,不知所云。查了一下MSDN,才略懂一些,摘到此。allocator::rebind功能:A structure that enables an allocator for objects of one type to allocate storage for object... 阅读全文
posted @ 2010-08-19 09:16 独酌逸醉 阅读(2056) 评论(0) 推荐(0) 编辑
摘要:根据STL的规范,以下是allocator的必要接口:allocator::value_typeallocator::pointerallocator::const_pointerallocator::referenceallocator::const_referenceallocator::size_typeallocator::difference_typeallocator::rebind一个嵌套的(nested)class template。class rebind<U>拥有唯一成员other,那是一个typedef,代表allocator<U>allocato 阅读全文
posted @ 2010-08-19 09:14 独酌逸醉 阅读(465) 评论(0) 推荐(0) 编辑