<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[undefined_behavior的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/undefined_behavior</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; undefined_behavior]]></copyright><item><title><![CDATA[虚拟机会让程序更慢吗?]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2096683</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2096683</guid><author>undefined_behavior</author><pubDate>Fri, 15 Feb 2008 10:58:00 +0800</pubDate><description><![CDATA[        有不少人反对使用虚拟机,他们的观点有许多种,其中最主要的就是虚拟机会降低程序的执行性能。他们认为，编译型语言---如C语言---是以计算机自身的机器代码的形式执行的，因此会执行的更快些。但这种说法并不正确。         纯粹的C++代码并不一定比由虚拟机执行的字节码（bytecode）更快。道理很简单，程序的执行时间主要消耗在运行时库（run-time library）]]></description><category></category></item><item><title><![CDATA[怎样在 C++ 中计算对象的实例化次数]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067357</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067357</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:11:00 +0800</pubDate><description><![CDATA[                                                                         Objects Counting in C++  在 C++ 中，对某个 class 所产生出来的 objects保持正确的计数，是办得到的，除非你面对一些疯狂份子。译文保留原作时态，并未修改。以下是译文所采用的几个特别请读者注意的术语：client ：]]></description><category></category></item><item><title><![CDATA[利用C++模板技术支持多种计算策略]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067347</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067347</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:09:00 +0800</pubDate><description><![CDATA[任何有经验的程序员和软件设计师都知道，在软件开发中最常见的困境的并不是在问题面前束手无策，而是在一大堆好像都可行的解决策略中选择一个。软件设计就是选择的过程，其困难之处也就在于你得不断地、小心翼翼地做出各种选择。在传统的程序设计模式下，每一次选择都是不可逆转的，你做出了选择，那么随后的开发都将会受到这次选择的剧烈影响。当你发现自己当初的选择错误的时候，可能一切都已经为时太晚。这有点像是走迷宫，而走]]></description><category></category></item><item><title><![CDATA[确定一个对象在使用前已经被初始化]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067342</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067342</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:07:00 +0800</pubDate><description><![CDATA[C++ 看上去在对象的初始化方面变化无常。例如，如果你这样做，int x;在某些情形下，x 会被初始化（0），但是在其它情形下，也可能没有。如果你这样做，class Point {  int x, y;};...Point p;p 的数据成员有时会被初始化（0），但有时没有。如果你从一个不存在未初始化对象的语言来到 C++，请注意这个问题，因为它非常重要。读取一个未初始化的值会引起未定义行为。在一]]></description><category></category></item><item><title><![CDATA[关于CString]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067337</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067337</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:05:00 +0800</pubDate><description><![CDATA[通过阅读本文你可以学习如何有效地使用 CString。　　CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作，使得MFC在做字符串操作的时候方便了很多。不管怎样，使用CString有很多特殊的技巧，特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。　　使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册，]]></description><category></category></item><item><title><![CDATA[Data Alignment]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067333</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067333</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:04:00 +0800</pubDate><description><![CDATA[#pragma pack   Preface    很多 CPU ，如基于 Alpha, IA-64, MIPS, 和 SuperH 体系的，拒绝读取未对齐数据。当一个程序要求其中之一的 CPU 读取未对齐数据时，这时 CPU 会进入异常处理状态并且通知程序不能继续执行。举个例子，在 ARM, MIPS, 和 SH 硬件平台上，当操作系统被要求存取一个未对齐数据时默认通知应用程]]></description><category></category></item><item><title><![CDATA[为什么 char** 不能自动转化为 const char** ]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067328</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067328</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:02:00 +0800</pubDate><description><![CDATA[一次偶然的情况下我发现以下代码竟然无法被编译通过（如果你的编译器，比如VC6或VC2003，允许它编译通过，我想你首先应该换个编译器，比如GCC或VC2005）：void foo( const char* [] ) { }int main( void ){    char* s[2];    foo( s );}简化成更一般的形式是：char** p1 = 0;const char** p2 = ]]></description><category></category></item><item><title><![CDATA[一个C++ 内存泄漏检测器]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067325</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067325</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 20:01:00 +0800</pubDate><description><![CDATA[内存泄漏对于C/C++程序员来说也可以算作是个永恒的话题了吧。在Windows下，MFC的一个很有用的功能就是能在程序运行结束时报告是否发生了内存泄漏。在Linux下，相对来说就没有那么容易使用的解决方案了：像mpatrol之类的现有工具，易用性、附加开销和性能都不是很理想。本文实现一个极易于使用、跨平台的C++内存泄漏检测器。并对相关的技术问题作一下探讨。基本使用对于下面这样的一个简单程序tes]]></description><category></category></item><item><title><![CDATA[谈谈C++内存泄漏]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067322</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067322</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:57:00 +0800</pubDate><description><![CDATA[对于一个c/c++程序员来说，内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题，比如Smart Pointer，Garbage Collection等。Smart Pointer技术比较成熟，STL中已经包含支持Smart Pointer的class，但是它的使用似乎并不广泛，而且它也不能解决所有的问题；Garbage Collection技术在Java中已经比较]]></description><category></category></item><item><title><![CDATA[调用规范与可变参数表]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067321</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067321</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:56:00 +0800</pubDate><description><![CDATA[         语言调用规范是指进行一次函数调用所采用的传递参数的方法，返回值的处理以及调用堆栈的清理。Microsoft C/C++ 语言中采用了五种调用规范，分别是__cdecl, __stdcall, __fastcall，thiscall和nake每一中调用规范都是利用eax作为返回值，如果函数返回值是64位的，则利用edx:eax对来返回值。Nake调用规范非常的灵活，足以独立]]></description><category></category></item><item><title><![CDATA[完整ASCII字符表]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067320</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067320</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:54:00 +0800</pubDate><description><![CDATA[                                     ASCII（美国信息交换标准编码）表                                                    字符                                    ASCII代码                    ]]></description><category></category></item><item><title><![CDATA[C++流格式控制]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067319</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067319</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:52:00 +0800</pubDate><description><![CDATA[格式控制     当输入／输出的数据没有指定格式，它们都按缺省的格式输入／输出。然而，有时需要对数据格式进行控制。这时需利用ios类中定义的格式控制成员函数，通过调用它们来完成格式的设置。ios类的格式控制函数如下所示：                        long flags( ) const            返回当前的格式标志。       ]]></description><category></category></item><item><title><![CDATA[UNICODE字符输出？？？]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067317</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067317</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:51:00 +0800</pubDate><description><![CDATA[这几天研究Unicode，勤快些，把看到的东西觉得有用的都copy了下来，文章是拼凑出来的，所以看起来会觉得有些乱 ：）。  1. wprintfQ : sizeof(wchar_t) = ?A : 随编译器不同。(所以:在需要跨平台的时候尽量不用wchar_t) vc : sizeof(wchar_t) = 2;Q: 在vc中，为什么直接使用wprintf(L"测试1234")会没有结果]]></description><category></category></item><item><title><![CDATA[关于'ab'的类型]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067314</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067314</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:49:00 +0800</pubDate><description><![CDATA[今天看MSDN偶然间发现其中有这么一句：int mbch = ab; 对ab这种表示方法还是第一次见到（别见笑啊，呵呵）：P并且它的类型是const int，这更让我感到迷惑。仔细研究了一番，稍微弄懂了一些，特地写下这篇文章记录一下。以备日后察看（VC6）。关于ab等字符常量的类型，周星星(bruceteen)说C++标准文档中是有规定的（具体我没有去翻阅文档），他]]></description><category></category></item><item><title><![CDATA[谈谈连接器是如何工作的]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067312</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067312</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:47:00 +0800</pubDate><description><![CDATA[许多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误，而且通常是在使用第三方库时遇到的。对于这个问题，有的朋友可能不知其然，而有的朋友可能知其然却不知其所以然，那么本文就试图为大家彻底解开关于它的种种疑惑。    大家都知道，从C/]]></description><category></category></item><item><title><![CDATA[Use Pseudoregisters to debug in MSVC++]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067311</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067311</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:46:00 +0800</pubDate><description><![CDATA[IntroductionLets start with the reason why I wrote this article. One day, a colleague asked me to help him debug a problem he had. So I was watching him stepping in his code, when I noticed the fol]]></description><category></category></item><item><title><![CDATA[Class function callback]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067309</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067309</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:45:00 +0800</pubDate><description><![CDATA[这篇文章介绍了如何使类中的非静态成员函数成为线程函数或者使其成为回调函数的方法，颇值得一读：IntroductionIn this article Ill show you how to make a callback to a function within a class that is NOT static. This will make use of functions, poi]]></description><category></category></item><item><title><![CDATA[typedef的四个用途和两个陷阱]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067308</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067308</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:44:00 +0800</pubDate><description><![CDATA[用途一：定义一种类型的别名，而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如：char* pa, pb;  // 这多数不符合我们的意图，它只声明了一个指向字符变量的指针， // 和一个字符变量；以下则可行：typedef char* PCHAR;  // 一般用大写PCHAR pa, pb;        // 可行，同时声明了两个指向字符变量的指针虽然：char *pa, *pb;]]></description><category></category></item><item><title><![CDATA[c++ 重载决议与可访问性检查 ]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067306</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067306</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:42:00 +0800</pubDate><description><![CDATA[对于如下的类：class ClxECS{public:    double Test(double dValue) { return dValue * 13; };private:    int Test(int iValue) { return iValue * 13; };};    下面的函数输出是什么？void ECS_test(){    int iValue =]]></description><category></category></item><item><title><![CDATA[C++回调（CallBack）方案 ]]></title><link>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067300</link><guid>https://blog.youkuaiyun.com/undefined_behavior/article/details/2067300</guid><author>undefined_behavior</author><pubDate>Sat, 26 Jan 2008 19:39:00 +0800</pubDate><description><![CDATA[跟诸如Object Pascal和Ada等其它一些语言不同，C++语言并没有内在地提供一种将类的方法作为回调函数使用的方案。在C语言中，这种回调函数被称作算子（functor），在事件驱动类程序中普遍存在。主要问题基于这样一个事实：某个类的多个实例各自位于内存的不同位置。这就需要在回调的时候不仅需要一个函数指针，同时也需要一个指针指向某个实例本身（译者注：否则回调时便无法知道目前正在操作的是哪个对]]></description><category></category></item></channel></rss>