随笔分类 -  C/C++

摘要:做个笔记,几个wiki还有stackoverflow的回答串联起来理解 1) https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems 2) https://stackoverflow.com/question 阅读全文
posted @ 2020-03-04 17:55 IT屁民 阅读(260) 评论(0) 推荐(0)
摘要:字符编码,之前已经写过一篇文章了。今天老生常谈,再深入的分析一下。算是一个总结。力求简洁明了,不求长篇大论。 序 字符编码向来是个老大难的问题,从python 2.7,到windows下各种中文乱码,再到mysql中文字符的传输存储和显示,每个程序员都应该趟过这些个坑。 为了一劳永逸解决这个问题,要 阅读全文
posted @ 2020-03-03 00:48 IT屁民 阅读(315) 评论(0) 推荐(0)
摘要:写在前面:最新公司马上就要开始开发一款视觉产品,工程量较大,且需要对客户提供可以二次开 发的SDK,整个项目用C++编写。 这就对代码质量提出了非常高的要求,同时,如何设计出优雅稳定的API也是相当大的挑战。 当然,团队首先需要解决的问题是编程规范的确立。之前,公司规模较小,对C++代码规范不够重视 阅读全文
posted @ 2018-06-22 19:11 IT屁民 阅读(590) 评论(0) 推荐(0)
摘要:案例:一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去。在运行途中用ctrl+C终止程序,发现定向文件始终为空,即写失败。分析:原本以为是bash重定向机制导致的问题,于是将重定向取消,改为使用fprintf,而非p... 阅读全文
posted @ 2015-04-18 21:21 IT屁民 阅读(3848) 评论(0) 推荐(0)
摘要:迭代器操作 说明(1)所有迭代器p++ 后置自增迭代器++p 前置自增迭代器(2)输入迭代器*p 复引用迭代器,作为右值p=p1 将一个迭代器赋给另一个迭代器p==... 阅读全文
posted @ 2015-01-25 23:13 IT屁民 阅读(3469) 评论(0) 推荐(1)
摘要:数组内存连续分配,长度大小固定,内置的最基础的数据结构之一。支持随机访问和随机存储。该类型数据所占内存空间最小。Vector是C++ STL中的一个容器。和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取(即使用[]操作符访问其中的元素),但由于它的内存空间是连续的... 阅读全文
posted @ 2014-11-20 11:27 IT屁民 阅读(1106) 评论(0) 推荐(0)
摘要:C与C++混合编程C++ 是在 C 语言的基础上发展起来的。在某种程度上,我们可将 C++ 看做 C 的一种扩展。在本质上,二者的数据类型和函数调用惯例都是一致的,因此 C 与 C++ 混合编译也是很自然的事情。二者的区别仅在于编译后函数的名字不同──C 简单地使用函数名而不考虑参数的个数或类型,而... 阅读全文
posted @ 2014-11-19 23:41 IT屁民 阅读(565) 评论(0) 推荐(0)
摘要:StackOverflow上一个很有名的问题,gcc和g++到底有什么区别?答案如下:GCC: GNU Compiler Collection指的是GNU编译器所支持的所有不同的类型的语言gcc: GNU C Compilerg++:GNU C++ Compiler主要的区别在于:1.gcc会将.c... 阅读全文
posted @ 2014-11-19 23:23 IT屁民 阅读(339) 评论(0) 推荐(0)
摘要:题目不多说了。见https://oj.leetcode.com/problems/word-ladder-ii/这一题我反复修改了两天半。尝试过各种思路,总是报TLE。终于知道这一题为什么是leetcode上通过率最低的一道题了,它对时限的要求实在太苛刻了。在我AC版本代码的前一个版本,最好也就过了... 阅读全文
posted @ 2014-05-23 21:46 IT屁民 阅读(10773) 评论(1) 推荐(2)
摘要:1.Q:vector的push_back()方法到底做了些什么? 为什么声明写的是void push_back (const value_type& val);A:的确,乍一看,似乎push_back方法添加了一个引用。哦,天啊,如果这个引用对象被析构了,那岂不是要出错。官方文档是这样写的Adds ... 阅读全文
posted @ 2014-05-20 20:00 IT屁民 阅读(473) 评论(0) 推荐(0)
摘要:leetcode上刷题。碰到一题实现LRU算法的题目。LRU,Least recently used。是一种常见的cache和页面替换算法。算法和原理可以参阅相关wiki。leetcode上的这一题,时间要求很苛刻,如果达不到O(1)复杂度的话,基本上会TLE。所以,这一题如果用C++来解的话,需要... 阅读全文
posted @ 2014-05-20 11:08 IT屁民 阅读(512) 评论(0) 推荐(0)
摘要:在C++中,静态成员函数只能访问静态成员,原因在于没有this指针。这已经是常识了。其实,成员函数在编译时,编译器会自动加上this指针。比如A a;a.func(1);会当做A::func(&a, 1);成员函数的原型是A::func(int);编译器处理后等价于A::func(A* const ... 阅读全文
posted @ 2014-05-11 23:09 IT屁民 阅读(4527) 评论(0) 推荐(0)
摘要:最近看了下汇编,主要是想了解下cdecl和stdcall的区别。之前没有汇编基础,只知道少许简单的汇编指令,如mov等等。这两天看了若干,总结一下吧,当然只是部分知识点,对我而言已经很受用了。1. cdecl 和 stdcall 的区别(从汇编层面解释)其实在选择这两者时,最主要的考虑是可变参数的问... 阅读全文
posted @ 2014-05-06 11:34 IT屁民 阅读(3070) 评论(0) 推荐(0)
摘要:今天遇到了一个问题,大致描述一下就是有两个类A和B。我想达到如下效果:B是A的友元,同时A是B的类类型成员。第一次尝试,在B.h中包含A.h,在A.h中包含B.h,在A类中声明friend class B,在B类的定义中加入A a;这一次尝试必然失败,编译报错,缺少分号什么的,原因是相互包含头文件。... 阅读全文
posted @ 2014-01-08 22:31 IT屁民 阅读(1458) 评论(0) 推荐(0)
摘要:C语言标准(不管是ANSI 还是ISO)包含2部分,一部分是语言本身的标准,另一部分是C标准函数库。C标准函数库规定了函数的原型和功能,但是并没限定这些函数要怎么实现。所谓满足标准C规定的C编译器,不仅指这个编译器满足C语言本身的标准,还指这个编译器提供了一组满足C标准库的库函数。这组库函数是由编译器厂商实现,并且满足标准C规定的功能和接口的。这些库函数,厂商并不一定要提供给用户源文件给用户编译用,可以是二进制目标文件给用户链接用(我猜这就是叫着运行库的原因之一,你看不到源码,能看到运行是的汇编码)。所以说,不管是哪个厂商的CRT,只要他宣称他是标准的C编译器,那他的CRT就肯定是满足C标准中 阅读全文
posted @ 2013-12-18 19:42 IT屁民 阅读(1181) 评论(0) 推荐(0)
摘要:一旦DLL的文件映像被映射到调用进程的地址空间中,DLL的函数就可以供进程中运行的所有线程使用。实际上,DLL几乎将失去它作为DLL的全部特征。对于进程中的线程来说,DLL的代码和数据看上去就像恰巧是在进程的地址空间中的额外代码和数据一样。当一个线程调用DLL函数时,该DLL函数要查看线程的堆栈,以... 阅读全文
posted @ 2013-12-18 19:40 IT屁民 阅读(2334) 评论(0) 推荐(1)
摘要:友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是 阅读全文
posted @ 2013-12-17 19:35 IT屁民 阅读(274) 评论(0) 推荐(0)
摘要:1基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了 阅读全文
posted @ 2013-07-14 09:56 IT屁民 阅读(254) 评论(0) 推荐(0)
摘要:强制类型转换的一般形式为:(类型名)(表达式)如:(int)a。这是C语言使用的形式,C++把它保留了下来,以利于兼容。C++还增加了以下形式:类型名(表达式)如:int(a)。这种形式类似于函数调用。 阅读全文
posted @ 2013-06-26 15:20 IT屁民 阅读(482) 评论(0) 推荐(0)
摘要:这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h ISO C99: 7.18 Integer types <stdint.h> 1 /* There is some amount of overlap with <sys/types.h> as known by inet code */ 2 #ifndef __int8_t_defined 3 # define __int8_t_defined 4 typedef signed char int8_t; 5 typedef short int in... 阅读全文
posted @ 2013-06-21 09:39 IT屁民 阅读(15800) 评论(0) 推荐(3)