`
totoxian
  • 浏览: 1095763 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

c++的诡异与艺术一例

 
阅读更多

c++到底是诡异的还是艺术的,可能都是吧,说它诡异是因为没有理解它的精髓,说它艺术那是因为理解了它的精髓,我这里仅以一个实际的例子说明,在工作过程中,我的项目经理让我看一段程序,可能程序的作者根本不懂怎么进行互斥,这足以说明他不是一个合格的程序员,为何说他不懂基本的互斥呢?以下是一个函数:

int in_use = 0;

XXX XXX(XXX yyy)

{

while(in_use == 1)

{

Sleep(1);

}

SyncClass instance(&in_use);

//do_something;

}

很显然,这个in_use的意义就是为了防止这个XXX函数被重入,我说作者不合格的原因是完全可以用WaitForSingeleObject之类的函数来完成,用这种方式就显得太“低级”了,我的项目经理还迷惑于没有发现在什么地方将in_use这个变量设置为1,他在我们的项目出了大问题而又面对这种诡异的代码的时候显得十分气愤,删去吧,万一作者有很什么隐藏的很深的意图呢?不删吧,实在对这种互斥方式不解,然而当我看到这段代码的头文件的时候,一切豁然开朗了,SyncClass的定义如下:

class SyncClass

{

public:

SyncClass(int* _use):m_use(_use)

{

*m_use=1;

}

~SyncClass()

{

*m_use=0;

}

private:

int* m_use;

};

很简单的一个类,在调用构造函数的时候将参数作为一个地址,然后将该地址指向的值设置为1,然后在析构的时候将其设置为0,而函数XXX中只是简单的建立了一个SyncClass对象,调用了其唯一的显式的构造函数,可以看到并没有用这个对象做任何事情,这个对象的意义就在于互斥,c/c++的特性决定了变量的作用域,该对象是一个局部变量,在出去它所在的大括号之外,它就离开了它的作用域,c++中,一个对象离开了作用域就要调用其析构函数,而虚构函数中将互斥变量的值设置为了0。这个方式的好处在于你几乎不用时刻操心在离开函数的时候忘记了释放互斥量。

这个方案是美妙还是诡异,起初,我的项目经理说这种摸不着头脑的代码肯定是一个大学生写的,然而我不赞同他的观点,这个代码恰恰表现了作者坚实的基本功,他可能不懂api,但是他却深刻的理解了c++的精髓,这二者哪一点更重要呢?现在很多程序员api玩得不亦乐乎,但是基本的知识却一问三不知,不知道内存怎么读,不知道int类型的数据在内存的布局,这到底说明这个程序员效率高还是根基不牢?...我其实根本不喜欢那些只会调用API的人,他们可能会是很好的执行者,但是他们很难设计出良好的系统,你难道指望一个根本不懂原理的人去充分挖掘原理性的潜力吗?个版本不可能的。

有人认为搞操作系统的人水平就一定很高,其实不是,搞应用的人水平更高,我这里说的不是编码的人,而是搞设计搞架构的人,大多数的应用要比操作系统复杂的多,要考虑的问题要多得多,随便看一个订单系统的逻辑设计图就会发现它的复杂,特别是高复杂度的面向对象的系统更是如此,设计模式就像是一堵墙,时刻在权衡着设计的优劣。

分享到:
评论

相关推荐

    C++程序设计经典300例.rar

    《C++程序设计经典300例》是一个深入学习C++编程的重要资源,它涵盖了C++语言中的核心概念和常见编程技巧。这份资料旨在帮助初学者和有经验的开发者巩固和提升C++技能,通过实际的编程实例来理解和掌握语言的关键...

    Visual C++编程技巧精选500例

    《Visual C++编程技巧精选500例》是一本针对Visual C++开发的实用教程,旨在帮助程序员通过实例学习和掌握VC++的各种编程技巧。这本书覆盖了从基础到高级的各种主题,包括常用控件的使用、对话框设计、图形图像处理...

    Visual C++ 编程技巧精选500例 - [罗斌].pdf

    Visual C++ 编程技巧精选500例 - [罗斌].pdf

    C++应用编程200例

    1.本盘上给出的所有程序实例均在Microsoft Visual C++ 6.0开发环境中调试通过。 2. 读者可按本书附录A的介绍,在自己机器上安装Microsoft Visual C++ 6.0开发系统。 3. 读者可按附录B的介绍,使用Visual C++ 6.0系统...

    Visual C++数据库实用编程100例.((铁道出版.崔莹)(配书源码)

    《Visual C++数据库实用编程100例》是一本针对C++程序员的数据库应用开发指南,作者团队由崔莹、王华军和姚雪峰组成,由中国铁道出版社出版。这本书旨在通过100个实际的编程示例,帮助读者掌握在C++环境下进行数据库...

    Visual C++ 编程技巧精选500例

    Visual C++ 编程技巧精选500例 Visual C++ 编程技巧精选500例 Visual C++ 编程技巧精选500例 Visual C++ 编程技巧精选500例 Visual C++ 编程技巧精选500例

    C++编程100例,全是C++的例子

    在这个案例中,我们探讨如何使用C++编程语言解决一个经典的数学问题——找出由数字1、2、3、4组成的全部三位数,并确保这些数字在每一位上都不重复。 **程序逻辑与解析** 1. **三重循环结构**:为了生成所有可能的...

    《Visual C++开发实战1200例第2卷》+源代码

    《Visual C++开发实战1200例第2卷》是一本专为C++初学者和进阶者设计的教程,旨在通过丰富的实例帮助读者掌握Visual C++编程技术。本书结合了理论与实践,深入浅出地介绍了C++语言的核心概念、面向对象编程原则以及...

    Visual C++ 开发实战1200例第1卷高清带书签.rar

    《Visual C++ 开发实战1200例》是一本深度涵盖C++编程技术的实践指导书籍,旨在帮助读者从初级到高级逐步掌握Visual C++的开发技能。书中的1200个实例覆盖了从基础语法、面向对象编程、MFC应用、Windows API编程到...

    Visual C++开发实战1200例 第一章

    《Visual C++开发实战1200例(第1卷)》简介:《Visual C++开发实战1200例》包括第I卷、第II卷共计1200个例子,《Visual C++开发实战1200例(第1卷)》是第I卷,共计602个例子。《Visual C++开发实战1200例(第1卷)》以...

    c++经典100例(很适合初学者参考学习)

    "初学c++的100个例子"就是这样一个平台,它将理论知识与实际操作相结合,让你在编写代码的过程中逐渐熟悉C++的语法和逻辑。 这100个例子涵盖了C++编程的各个方面,从基本的数据类型、控制结构(如if语句和循环),...

    C++经典练习例题200例

    总的来说,"C++经典练习例题200例"是一份全面覆盖C++基础知识和核心概念的资料。通过解决这些题目,你可以逐步提高编程能力,从初学者成长为熟练的C++程序员。无论是对基本语法的巩固,还是对面向对象编程、模板、...

    Visual C++6.0时尚编程百例代码-应用入门

    第一篇 应用入门 实例1 Hello World 实例2 创建窗口 实例3 C++中的I/O输出 实例4 图标 实例5 创建和编辑菜单 实例6 快捷键 实例7 鼠标响应 实例8 更换鼠标形状 实例9 键盘输入显示 实例10 滚动轴 实例11 模式对话框 ...

    Visual C++开发实战1200例第1卷高清+完整源代码

    Visual C++开发实战1200例第1卷高清+完整源代码

    C++语言经典、实用、趣味编程百例精解\C++经典程序200例、c语言经典算法100例

    除了基础和进阶算法,本书还包含了一份特别的"C++语言经典、实用、趣味编程百例精解"文档,它专注于展示C++在实际应用中的趣味性与实用性,内容可能涉及游戏开发、图形用户界面设计、文件操作等领域。这些主题不仅...

    C++编程实例100例

    《C++编程实例100例》是一份涵盖了C++编程基础到进阶的实践教程,旨在帮助初学者快速掌握C++语言的核心概念和技术。这个压缩包包含了100个精心设计的C++编程示例,每个实例都代表了一个特定的知识点或技巧,通过实际...

    C++趣味小程序百例

    以上案例仅是《C/C++趣味程序百例》中的一部分,每一道题目都围绕着不同的编程概念和技术进行设计,旨在帮助初学者掌握并运用C/C++语言的基础知识,提高解决实际问题的能力。通过这些趣味性的编程实践,学习者可以...

    Visual C++ 6.0 时尚编程百例 绝版图书 pdf

    《Visual C++ 6.0时尚编程百例》2003年出版,是一本非常经典的学习C++ MFC架构的图书,现在已经绝版。为大家提供pdf资料,方便大家学习。

    C++经典练习例题200例.ra

    C++经典练习例题200例

    C++100例(包含全部源码)

    《C++100例(包含全部源码)》是一份专门为C++初学者准备的实践教程,旨在通过丰富的实例帮助学习者深入理解和掌握C++编程语言。这份资源包括了100个精心设计的C++编程实例,覆盖了C++的基础到进阶知识,对于想要在...

Global site tag (gtag.js) - Google Analytics