
C++ Language
文章平均质量分 65
olncy
这个作者很懒,什么都没留下…
展开
-
字符,字节和编码
引言“字符与编码”是一个被经常讨论的话题。即使这样,时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因,实际上由于底层代码本身有问题所导致的。因此,不仅是初学者会对字符编码感到模糊,有的底层开发人员同样对字符编码缺乏准确的理解。1. 编码问题的由来,相关概念的理解1.1 字符与编码的发展从计算机对多国语言的转载 2008-07-09 21:24:00 · 684 阅读 · 3 评论 -
TEA加密算法的C/C++实现
TEA(Tiny Encryption Algorithm) 是一种简单高效的加密算法,以加密解密速度快,实现简单著称。算法真的很简单,TEA算法每一次可以操作64-bit(8-byte),采用128-bit(16-byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。目前我只知道QQ一直用的是16轮TEA。没什么好说的,先给出C语言的源代码(默认是32轮): 1 vo转载 2008-06-07 20:43:00 · 2106 阅读 · 3 评论 -
非完美C++ Singleton实现[2]
4.解决多线程问题上一篇实现的Singleton只能在单线程环境中使用,在多线程环境中会出现很多问题,看Instance()实现代码:1 static Singleton& Instance() {2 if (0 == _instance) { //13 _instance = new Singleton(); //24 atexit(Destroy);转载 2008-06-07 20:03:00 · 646 阅读 · 0 评论 -
一种另类的memcpy写法(在switch里写入一个dowhile)
void* mymemcpy( void* dest, const void* src, size_t count ){ char* d = (char*)dest; const char* s = (const char*)src;转载 2009-08-17 16:42:00 · 949 阅读 · 0 评论 -
也谈内存对齐
转者注:虽然本文写得不太好,但是见到写得这么长就顺便转来看一下 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://bigwhite.blogbus.com/logs/1347304.html在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”转载 2009-10-29 18:15:00 · 545 阅读 · 0 评论 -
二谈内存对齐
转者注: 这续集写得比第一集还要差,本来不想转的,但看到他写了那么长,就顺便转来看一下 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://bigwhite.blogbus.com/logs/2661330.html关于内存对齐的话题,始终是敏感的。稍有不慎,必将闯下大祸!最近项目稍显轻闲,自己给自己安排一天反思和总结一下,突然想到以前写转载 2009-10-29 18:23:00 · 537 阅读 · 0 评论 -
三谈内存对齐
转者注:看到这样的排版真让人恶心到极点...不过见到原作者写了那么长就顺便转来看一下 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://bigwhite.blogbus.com/logs/3990258.html记得以前曾经两次谈到过内存对齐话题,一次在也谈内存对齐一文中,另一次则是也谈内存对齐(续),今天下午和同事又谈到转载 2009-10-29 18:25:00 · 673 阅读 · 0 评论 -
四谈内存对齐
转者注:都已经转到第四篇了,不多说了...... 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://bigwhite.blogbus.com/logs/31444643.html最近在思考改进项目中一模块的实现,该模块维护起来让我很是头疼,所有才有了整体换掉它的想法。设计和实现中利用了内存对齐的技术。关于内存对齐,我曾经写过三篇文章,转载 2009-10-29 18:28:00 · 578 阅读 · 0 评论 -
C++ 的恐怖
<br />Linux之父曾说过C++是很恐怖的。开始还不相信但看到下面的程序时,我就相信了。<br /> <br />class A{public: void f() {cout<<"a"<<endl;} void p() {u = 100;cout << u<<endl;} int u;};class B:public A{public: void c() {cout << "c"<<endl;} void f() {i = 10;cc = 2;cout<<"原创 2010-09-15 17:22:00 · 919 阅读 · 1 评论 -
MD5算法的C++实现
1. IntroductionMD5算法是一种消息摘要算法(Message Digest Algorithm),此算法以任意长度的信息(message)作为输入进行计算,产生一个128-bit(16-byte)的指纹或报文摘要(fingerprint or message digest)。两个不同的message产生相同message digest的几率相当小,从一个给定的message dige转载 2008-06-07 20:41:00 · 611 阅读 · 0 评论 -
Is your Singleton Broken?
Singleton 是 C++ 程式設計裡,最古老的問題之一。典型的 (狹義的) singleton 是用一個 class 的 static member function 封裝,稱為 singleton pattern。The Gang of Four (GoF) 在 Design Patterns 討論並提出第一個 (在某種程度上似乎) 令人滿意的 singleton 解答,這個 patt转载 2008-06-07 20:27:00 · 798 阅读 · 0 评论 -
非完美C++ Singleton实现[1]
Singleton模式是一种非常简单的设计模式,这种模式很常用也很容易被滥用。当你设计应用程序的时候,经常会遇到某些对象在整个程序的生命周期应该仅有一个实例的情况,比如File System,Graphic System,Logging Utility,这时候就可以用到Singleton模式。Singleton模式在GOF中描述如下: Ensure a class only has转载 2008-06-07 20:01:00 · 555 阅读 · 0 评论 -
Google C++编程风格指南(一)
原文地址:Google C++ Style Guide背景Google的开源项目大多使用C++开发。每一个C++程序员也都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug、难于阅读和维护。本指南的目的是通过详细阐述在C++编码时要怎样写、不要怎样写来规避其复杂性。这些规则可在允许代码有效使用C++语言特性的转载 2008-08-05 10:00:00 · 574 阅读 · 0 评论 -
Google C++编程风格指南(二)
原文地址:Google C++ Style Guide 作用域 1. 命名空间(Namespaces) 在.cc文件中,提倡使用不具名的命名空间(unnamed namespaces,译者注:不具名的命名空间就像不具名的类一样,似乎被介绍的很少:-()。使用具名命名空间时,其名称可基于项目或路径名称,不要使用using指示符。 定义:命名空间将全局作用域细分为不同的、具名的作用域,可有效防止全局作原创 2008-08-05 10:04:00 · 806 阅读 · 0 评论 -
Google C++编程风格指南(三)
这一篇主要提到的是类,Lippman在《Inside The C++ Object Model》第二章中对构造函数作了详尽说明,本文中提到的几个单词基本仿该书中译本侯捷先生的翻译:explicit:明确的implicit:隐含的trivial:没有意义的non-trivial:有意义的 原文地址:Google C++ Style Guide类原创 2008-08-05 10:05:00 · 588 阅读 · 0 评论 -
Google C++编程风格指南(四)
原文地址:Google C++ Style Guide Google特有的风情 Google有很多自己实现的使C++代码更加健壮的技巧、功能,以及有异于别处的C++的使用方式。 1. 智能指针(Smart Pointers) 如果确实需要使用智能指针的话,scoped_ptr完全可以胜任。在非常特殊的情况下,例如对STL容器中对象,你应该只使用std::tr1::shared_ptr,任何情况下都原创 2008-08-05 10:06:00 · 643 阅读 · 0 评论 -
Google C++编程风格指南(六)
原文地址:Google C++ Style Guide 注释 注释虽然写起来很痛苦,但对保证代码可读性至为重要,下面的规则描述了应该注释什么、注释在哪儿。当然也要记住,注释的确很重要,但最好的代码本身就是文档(self-documenting),类型和变量命名意义明确要比通过注释解释模糊的命名好得多。 注释是为别人(下一个需要理解你的代码的人)而写的,认真点吧,那下一个人可能就是你! 1. 注释风转载 2008-08-05 10:07:00 · 702 阅读 · 0 评论 -
Google C++编程风格指南(七)
原文地址:Google C++ Style Guide 格式 代码风格和格式确实比较随意,但一个项目中所有人遵循同一风格是非常容易的,作为个人未必同意下述格式规则的每一处,但整个项目服从统一的编程风格是很重要的,这样做才能让所有人在阅读和理解代码时更加容易。 1. 行长度(Line Length) 每一行代码字符数不超过80。 我们也认识到这条规则是存有争议的,但如此多的代码都遵照这一规则,我们感转载 2008-08-05 10:08:00 · 694 阅读 · 0 评论 -
Google C++编程风格指南(八)[完]
原文地址:Google C++ Style Guide 规则之例外 前面说明的编码习惯基本是强制性的,但所有优秀的规则都允许例外。 1. 现有不统一代码(Existing Non-conformant Code) 对于现有不符合既定编程风格的代码可以网开一面。 当你修改使用其他风格的代码时,为了与代码原有风格保持一致可以不使用本指南约定。如果不放心可以与代码原作者或现在的负责人员商讨,记住,一致转载 2008-08-05 10:09:00 · 753 阅读 · 0 评论 -
为什么不要特化函数模版
Overloading vs. Specialization 在C++中有class templates 和function templates,这两种模版有很多区别,最重要的区别就是重载(overloading):普通的C++类不能重载,当然类模版也不能重载;相反,普通函数可以重载,函数模版也能重载。这再正常不过,看下面的代码: 1 // Example 1: Class vs. func转载 2008-06-07 20:49:00 · 699 阅读 · 0 评论 -
[项目经验]在debug版编译加入/GZ选项后可发现构造函数中调用虚函数错误
<br />项目环境:windows visual studio 2003 C++<br /> <br />在一个项目中平时在debug版下没有遇到什么错误,连release版也不会出错,因为这个错是一个未定义的错误行为。但在debug版下加入“/GZ”编译选项后,运行时就会发现错误,原来是一个构造函数中调用了一个虚函数。通常在构造函数和析构函数中是不可以调用虚函数,因为这时对象并没有完成虚函数表的建立,所以在这时调用函数是很危险的。原创 2010-10-26 21:11:00 · 774 阅读 · 0 评论