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的人,他们可能会是很好的执行者,但是他们很难设计出良好的系统,你难道指望一个根本不懂原理的人去充分挖掘原理性的潜力吗?个版本不可能的。

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

 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273968


相关文章
|
3月前
|
程序员 编译器 数据处理
令人膛目结舌的代码技巧:探索编程世界奇妙之处(1)
令人膛目结舌的代码技巧:探索编程世界奇妙之处(1)
27 0
|
3月前
|
程序员 数据处理
令人膛目结舌的代码技巧:探索编程世界奇妙之处(3)
令人膛目结舌的代码技巧:探索编程世界奇妙之处(3)
25 0
|
3月前
|
缓存 程序员 Python
令人膛目结舌的代码技巧:探索编程世界奇妙之处(2)
令人膛目结舌的代码技巧:探索编程世界奇妙之处(2)
32 0
|
22天前
|
安全 算法 前端开发
作为程序员变强了也变秃了遇到令人膛目结舌的代码技巧
作为程序员变强了也变秃了遇到令人膛目结舌的代码技巧
13 1
|
3月前
|
数据采集 算法 Java
业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
29 1
|
10月前
|
定位技术 网络架构
搞不懂缺省路由?一个故事告诉你
搞不懂缺省路由?一个故事告诉你
72 1
|
设计模式 JavaScript 前端开发
你绝对想不到:编程和音乐有这么多相似之处,程序员原来是艺术家
很多大师都会把编程比作建筑,比如架构、设计模式,基本就是用的建筑的语言,其实我个人感觉编程和音乐也是极其类似的。 比如最近在断断续续在看一本《代码大全》,里边针对提高代码可读性的变量定义,提到了变量的“跨度”,这其实就非常像音乐中的“音程”。
|
机器学习/深度学习 人工智能 自然语言处理
AlphaCode 能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了
DeepMind 是最新的人工智能研究实验室。它推出了一个可以生成软件源代码的深度学习模型,成果令人印象深刻。该模型被称为 AlphaCode,基于 Transformer,与 OpenAI 在其代码生成模型中使用的架构是一样的。
143 0
AlphaCode 能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了
|
程序员
关于编程 鲜为人知的真相
导读:原文来自dotmac.rationalmind.net上一篇《Some lesser-known truths about programming》,译文来自外刊IT评论整理编译《关于编程,鲜为人知的真相》而来。
781 0

相关实验场景

更多