C/C++
天下第一好大人
天下第一好大人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浅解C语言的标准输入输出、标准错误
我们都知道用printf( xxx )和fprintf( stdin, xxx )是一个效果。所以stdin是一个FILE*类型的变量。同样的stdout和stderr也是。他们的定义在stdio.h(GNU实现)里,其中部分代码如下:/* Standard streams. */extern struct _IO_FILE *stdin; /* Standard原创 2012-12-20 12:18:18 · 9212 阅读 · 0 评论 -
C/C++ IO细节
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-09-06 22:30:01 · 1593 阅读 · 0 评论 -
多线程情况下libc IO的缓存
1 libc的缓冲地位 如图,如果调用printf之类的库函数,数据会先进入库缓冲区,然后在一定条件下(满足库定义的条件或主动调用fflush),才会写入操作系统缓冲区。 如果直接调用write系统函数,就会直接写入操作系统缓冲区,所以在即使在单线程的情况下,如果混用printf和write,也可能会有“时序错乱”问题,即后面的语句先输出的问题。可以参看我之前一篇文章。2 多线程下的printf原创 2016-04-06 19:41:08 · 1632 阅读 · 0 评论 -
C++还能重新辉煌吗?C++复杂性的思考
好多年前的文章,来源已经不知道了,但是读了还是深有感触,接触了C++和Java两种语言,真是觉得C++的高层次的库太匮乏了,乱而杂,重复造了好多个小轮子(或者还可能是破轮子),除了一个我不太了解的ACE,不知道什么时候才能有Java这样的高度统一的,文档齐全的,深入生产,解放劳动力的库。 C++的表面困境来自两方面,一是开发效率低,而是轻易犯错,维护难度大。此二者俱是表象,本质就是一个——过度复杂转载 2016-01-28 11:29:01 · 3054 阅读 · 0 评论 -
C++的零指针(NULL,0,nullptr)
原文地址:http://www.cppblog.com/airtrack/archive/2012/09/16/190828.aspx零指针的定义C语言:NULL C++03前:0 C++11:nullptr进化之路最开始,C语言中的NULL通常定义成#define NULL ((void *)0)// C语言有隐式指针转换,可以写如下代码int *i = NULL;time_t* t =转载 2015-10-02 13:34:44 · 4247 阅读 · 1 评论 -
如何用C++函数实现类似三目运算符的功能
问题引出今天aikilis问了我二个问题: 1. 下面这段代码合法吗?( i > 0 ? i : j ) = 1;如何用一个原型为quest(bool,type,type)的函数实现三目符的功能?经试验,第一个问题的答案是肯定的,虽然原来从没这么用过。 第二个问题确实费了很多脑筋。三目符的性质void test0() { int i = 0, j = 0, k;原创 2015-09-09 18:55:03 · 1851 阅读 · 0 评论 -
关于>?和<?运算符
昨天又看到群里有人问这个运算符,特意google了一下。这是gcc的扩展运算符,原文在此http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Min-and-Max.html简单说 a >? b就是 max( a, b ),a a >?= b 就是 a = max( a, b )a 据说这种符号已经废弃了,建议用原创 2013-12-09 13:39:12 · 2268 阅读 · 1 评论 -
[STL] __gnu_cxx::hash_map使用中的一些问题
这个不是gcc标准库的一部分,而是扩展ext中的一个功能,他提供了一个哈希表的实现。定义如下: template, class _EqualKey = equal_to, class _Alloc = allocator > class hash原创 2011-07-05 13:08:13 · 12505 阅读 · 1 评论 -
[C++] 关于C++的cast
【1、前言】 前一段时间给人回答一个问题回答错了,问题是dynamic_cast的耗时问题。我回答说这个只是字节的拷贝,没有其它耗时的,后来才知道由于继承关系有虚表vtable,里面涉及到继承链的转换,type识别。为了弥补,特意从《Working Draft, St翻译 2011-09-30 21:25:03 · 2758 阅读 · 2 评论 -
[C++] 如何初始化常量数组成员
今天编程时想在类中声明一个常量数组,发现无法初始化,后来在网上搜索,证明这是一个无法解决的问题。 因为根据C++语法,常量声明必须要在构造函数后用参数方式初始化,而x({1.0,2.0})又不符合语法。 只能声明成static类型,然后在源文件里定义。 // a.hclass A{private: static const int xx[10];}原创 2010-02-28 16:57:00 · 5897 阅读 · 2 评论 -
[C/C++] 不常见的关键字(保留字)
restrict关键字restrict关键字其实是在C语言才有的,是C99提出来的,目前C++还不支持。当一个指针在声明的作用域内,所有该指针指向的内存区域数据只能通过它访问,而不能通过别的指针。编译器会对此做检查。这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码转载 2011-07-13 20:16:55 · 2075 阅读 · 0 评论 -
[C++] 模板引入的变量名查找问题
参考资料:http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html翻译 2012-12-06 16:15:06 · 737 阅读 · 0 评论 -
[C++] 内存填充与达夫设备
若要设置一块内存为指定值,最简单莫过于memset了,然而它要求pattern是一个字节,如果想设置一个宽点的类型,例如整型,那么memset基本就无法发挥功效,除非设置的是0或者-1或者其它值能满足所有字节一样。下面提供几个方法,并大致比较一下:1> 普通的for循环,一次设置数组各个元素为指定值2> 滚动拷贝,1变2,2变4,4变8,越来越多……3> Duff's Device, 达夫设备,是一个叫Duff的人发明的,将循环的比较次数降为1/8,将switch和while糅合在一起。代码如下:#incl转载 2010-08-28 23:40:00 · 1860 阅读 · 8 评论 -
[C++] 编译器支持的内建函数
所谓内建,就是无需头文件就可以使用的函数。今天读一段C++标准库的代码,看到type_traits文件中调用了一个__is_enum函数,但是找不到函数定义。以下所列函数都是编译器为了支持标准库而内建的函数。__is_member_object_pointer __is_member_function_pointer __is_enum __is_union __is_cl转载 2012-12-06 11:55:44 · 1141 阅读 · 0 评论 -
[C++] C++11给我们带来的新特性
随着学习的步伐,逐渐更新。1 sizeof... 操作符,这是一个对变参个数的获取。template int count_args( T... args ) { return sizeof...(T); // sizeof...( args ); 也一样}int main() { std::cout << count_args( 1, 2,原创 2012-12-06 18:58:24 · 773 阅读 · 0 评论 -
关于PIMPL IDIOM(Opaque Pointer)
今天看到优快云的一个讨论帖:讨论如何隐藏DLL头文件细节的作法。http://bbs.youkuaiyun.com/topics/390414874说实话,我之前也有过类似的疑问,也没有特别好的想法,后来工作一直没有遇到过这个需求,就渐渐忘记了,其实某一次在miko的blog里面看到过pimpl的说法,但是还没有深刻理解,今天通过这个问题和查阅一些资料,终于了解了。下面的观点基本上都是翻译自[1翻译 2013-06-09 13:35:57 · 1893 阅读 · 0 评论 -
[C++] 关于FD_SETSIZE大小的问题
关于FD_SET的注意事项原创 2011-05-17 20:38:00 · 11312 阅读 · 4 评论
分享