大家觉得这个C++的问题傻不傻

时间:2021-10-11 06:44:33
有天面试,有个主管问了我一个关于C++的问题,但我觉得这个问题很傻,所以贴出来想找人鉴定下.

他问我: "C++有几种可以提高性能的特性"

我一下子愣住了,感觉很无奈,心想,C++有提高性能的特性么?貌似C++的特性都是降低性能的.

想了会, 我只好说:"内联函数吧"

然后他问我:"还有其他的么"

我说:"暂时想不出来"

不知道各位对这个问题怎么看的? 

要记住哦,特性一定是C++相关的

65 个解决方案

#1


右值引用算不算?

#2


模板元,编译期计算算不算?

#3


没有虚函数的模板继承算不算?

呵呵,觉得这个问题很有意思。
关注中。

#4


这个主管指的是引用、内联、指针等这些语言设施。

#5


这个主管不傻,是你对C++的理解有些问题。

#6


引用 4 楼 supermegaboy 的回复:
这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。

#7


引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用、内联、指针这些东西部分原因是出于这样的考虑。

那个主管其实也是这样的意思。

#8


引用 7 楼 supermegaboy 的回复:
引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用、内联、指针这些东西部分原因是出于这样的考虑。

……

哦。正如C++0x引入右值引用,目的就是为了解决过多的临时对象创建一样。
学习了。

#9


关注中!!!1

#10


引用 8 楼 loaden 的回复:
引用 7 楼 supermegaboy 的回复:

引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用……


对!

#11


"C++有几种可以提高性能的特性"

与谁比较? 与C语言比较?

#12


如果回答 根据个人实力而定 是不是直接就被FIRE了?

#13


去看下《c++应用程序性能优化》

#14


引用 7 楼 supermegaboy 的回复:
引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用、内联、指针这些东西部分原因是出于这样的考虑。

那……


我前面强调了是C++相关的,也就是所有C语言的特性都排除在外

因此首先 指针特性肯定是排除在外, 因为指针是C语言就有的,不是C++的特性,嘻嘻

#15


虚函数,既是提高性能的特征,也是降低性能的特征,看你的运用能力的。

#16


而内联则不是,因为C语言支持内联。

#17


引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


C语言有内联函数么? 你用的是哪个版本的C语言这么强大

#18


引用 15 楼 taodm 的回复:
虚函数,既是提高性能的特征,也是降低性能的特征,看你的运用能力的。

同意

#19


我前面强调了是C++相关的,也就是所有C语言的特性都排除在外

因此首先 指针特性肯定是排除在外, 因为指针是C语言就有的,不是C++的特性,嘻嘻
--------------------------------------------------------------------
"C++有几种可以提高性能的特性"这句话并非指C++与其它语言的比较,而是指C++为降低类设计所带来的性能损失而做了哪些工作。

#20


引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


内联在获得函数抽象特性的同时使程序可能免于函数实现所带来的开销,这是C++为了提升性能所作的努力之一。类设计经常使用代码很少的方法,为了几句代码而付出的管理开销是不值得的,特别是当一个类很大时,如果没有内联,到处都是函数调用,对性能的影响是显而易见的。

#21


引用 17 楼 kingsyj 的回复:
引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


C语言有内联函数么? 你用的是哪个版本的C语言这么强大


C99借鉴了C++的内联函数。

#22


引用 19 楼 supermegaboy 的回复:
我前面强调了是C++相关的,也就是所有C语言的特性都排除在外

因此首先 指针特性肯定是排除在外, 因为指针是C语言就有的,不是C++的特性,嘻嘻
--------------------------------------------------------------------
"C++有几种可以提高性能的特性"这句话并非指C++与其它语言的比较,而是指C++为降低类设计所带来的性能……


如果仅仅是为了回答该问题而把C语言的特新引入进来已经背离了我发该贴的初衷, 恐怕我要命题修改了下了,
"C++有几种可以提高性能的特性(仅仅是C++语言的特性,C语言的不算)", 因为我发起这个帖子的目的就是想知道有在C++设计基础上,我们可以概括出多少种可以提高性能(补充一下,我这里所只的性能应该是程序运行的性能,而并非是设计,构架,管理上的性能,因此模板以及面向对象等等的因素貌似可以排除)的C++语言特性.因为我们目前讨论的就是C++

例如, 目前我能够想到的特性有, 内联, 引用(相对而言)

#23


c++ 的性能优化

#24


const关键字也算是一个吧,如果变量不需要修改,对于使用编译期常量为const赋值,编译器会优化为不占用内存。

#25


constC里面也有,同时,C里的static远比C++里的const更经济:外部的static仅在模块内有效,而且是const的。

真正说起来C++相对C性能提高的也就引用,模板的性能比不上结构宏,更重要的是模板使得最终实现变得很大,从内存装载角度上,仅此一项性能就降低了,而模板从来就没快过宏过,单从速度上,C++与C不存在优势。

C++与C相比的性能优势在于对大型系统的处理上:无论开发、维护、整合、排错,C++相对C更稳定快捷,效率更高,尤其是多语言混合编程时。毕竟单纯的运行速度差异与IO时间相比,几乎不具可比性。

#26


引用 22 楼 kingsyj 的回复:
例如, 目前我能够想到的特性有, 内联, 引用(相对而言)

为什么我提到的:右值引用、模板元 不算呢?
请Google之。

这段代码远比它乍看上去的简单。_bz_meta_vectorDot类模板使用了一个临时变量loopFlag来存放每一步循环条件的评估结果,并使用了一个完全特化版作为递归终结的条件。需要说明的是,和几乎所有元程序一样,这个临时变量作用发挥于编译期,并将从运行代码中优化掉。
  Todd是在Blitz++数值数组库的主要作者。这个程序库(以及MTL和POOMA等程序库)例证了模板元程序可以为我们带来更加高效的数值计算性能。Todd宣称Blitz++的性能可以和对应的Fortran程序库媲美。
  Loki程序库:活用模板元编程技术的典范
  模板元编程的价值仅仅在于高性能数值计算吗?不仅如此。Loki程序库以对泛型模式的开创性工作闻名于C++社群。它很巧妙地利用了模板元编程技术实现了Typelist组件。Typelist是实现Abstract Factory、Visitor等泛型模式不可或缺的基础设施。 

#27


右值引用就更不用说了。
程序只要用VS2010编译发布,性能就可以提升一个档次:其中一个原因就是“右值引用”。

多继承实现中无虚函数的模板继承经优化后,性能是虚函数的近10倍!
运行优化版本,性能优势一下体现出来了,模板实现是虚函数的十倍:

 ./cmp_test_optimize
virtual function test: looptime=100000000
using time :0.615542  second
template function test: looptime=100000000
using time :0.055584  second
virtual function test: looptime=100000000
using time :0.624778  second
template function test: looptime=100000000
using time :0.057419  second
virtual function test: looptime=100000000
using time :0.624977  second
template function test: looptime=100000000
using time :0.059442  second
        有点惊人是不是?这个差别就是因为虚函数是不可优化和内联的,而模板函数是可内联的,这个性能差异就很大,再次随着虚表的增大虚函数的调用是有性能退化 的,而这点对于模板函数来说是没有的,因为在编译时,这一切都是静态了。不过客观的说,虚函数多态是C++语言内置的,在复杂度方面,应该首选虚函数,这 里提供的这个方法只是作者在学习过程中的一个体会,模板的世界实在是太奇妙和高深了。


http://hi.baidu.com/msingle/blog/item/7ae38d36dbd16b3c0a55a957.html

#28


所以我所回答的,都被您无视,我感觉非常不理解!
大家觉得这个C++的问题傻不傻

#29


该回复于2011-05-09 11:21:14被版主删除

#30


哎啊  你是个悲剧。。。
那老板有没有录取你啊

#31


引用 17 楼 kingsyj 的回复:
引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


C语言有内联函数么? 你用的是哪个版本的C语言这么强大

C99 里早支持内联啦!

#32


关注高手

#33


引用 28 楼 loaden 的回复:
所以我所回答的,都被您无视,我感觉非常不理解!


您误解小生的意思了, 我并没有无视的意思

我仅仅是发表一点个人看法而已,嘻嘻

小生再发表一些戳见, 前面各位大虾们提到的一些C/C++新标准引入的特性都很高级,但这些特性是否能在所有平台都很好地被支持,并且已经被人广为接受并使用?

我还是希望能够收集到一些比较普遍并广为接受的特性

#34


引用 30 楼 liaowen123 的回复:
哎啊 你是个悲剧。。。
那老板有没有录取你啊


这是很久远的事情了, 由于那时候确实比较菜, 一时对这个问题没什么想法, 现在只是突发奇想, 想再次思考一下这个问题而已

其实, 我对这个问题有点质疑, 因为程序的性能根本上受开发者使用的构架设计, 算法, 数据结构, 及编程习惯方面的因素影响, 如果单从语言特性方面去考虑的话, 我们能够为程序提高多少性能,或者能否提高性能, 就算有所提高, 我们引入的这些特性是否对我们的项目管理及软件发转有利,这些因素都是需要考虑的.

小生举个例子, 内联函数确实可以提高性能, 是否就意味着我们应该尽可能多地使用内联, 如果是,那当我们发布我们的软件时, 代码也跟着发布出去, 这对软件的发展有利么? 况且, 内联编译会增加二进制文件的大小(虽然相对而言是微不足道的),但这种思想是否对软件管理有利?

恐怕这些因素都是需要考虑的, 因此我对这个问题质疑的本质是:

当考虑程序性能时,我们应该更多从软件构架设计, 算法数据结构等等这些方面去考虑, 如果光从语言特性去考虑, 请问,光C/C++这些特性能够给我们带来多少优化的空间?

#35


我现在写程序都是用C++,只有为别的开发人员提供API的时候,才会考虑来几句C--因为很多时候需要返回char*,char**之类的东西。

C++相对于C在运行效率上的降低,对于简单程序来说,影响不大;而对于复杂程序来说,C++的在开发效率和代码管理和维护上的优势又是C所不能比的。

因此,尽管会被大多数人鄙视,我还是尽量用C++。至于引用之类的东西,能用就尽量用;而至于模板之类的东西,能不用就尽量不用。

#36


关注中

#37


引用 35 楼 super_admi 的回复:
因此,尽管会被大多数人鄙视,我还是尽量用C++。


为什么会这么说, 我从来不觉得使用C++会遭人鄙视

#38


这也不是技术帖?
我想知道为什么这个帖子要从C++小版移到非技术区?

#39


都是高手啊!
马克一下- -

#40


该回复于2011-05-09 13:04:02被版主删除

#41


......

#42


最主要是因为C++太繁琐--相对于C来说。
就像某些资深人士,喜欢手动敲命令,而鄙视使用鼠标点击。

引用 37 楼 kingsyj 的回复:
引用 35 楼 super_admi 的回复:
因此,尽管会被大多数人鄙视,我还是尽量用C++。


为什么会这么说, 我从来不觉得使用C++会遭人鄙视

#43


函数的继承

#44


引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。

C++中引用的实现方法就是指针。两者生成的汇编代码一模一样的。你可以查看下汇编代码。

#45


要是我我就先问清楚,面试官期待什么答案,开发速度?运行效率?或者其他方面?

#46


我能想到的是 引用(传参等), 右值引用(新C++标准的), 直接初始化(不知道是不是算C++的而不算C的特性),内联。。。。。

#47


楼主是刚毕业的找工作的吧
第一,你这个主管有问题,C++有什么特性,他怎么不问地球一天跑多少公里,连一个参考物都没有。
我问楼主,相对于JAVA而言,C++有哪些特性
第二,就算是C++ 就那几个基本的特性,我认为其中内联也算不上,我们平常写内联函数并不一定就会被编译成内联函数,(LZ 可以做下实验,你写一个1000行的函数,标志为内联),并在一个文件中,调用几百次编译成功后,理论上编译器会把这几百次地方换成那些代码
   然后LZ 你再把内联去掉,你再比较看看,他们有什么差异,
我们声明为内联的函数不一定会被编译成内联形式,而我们没有写内联的函数也不一定不会被编译成内联的,这取决于你的编译器,实际上内联只是鸡肋,只能是理论上的东西

#48


引用 47 楼 wtoufo000 的回复:
楼主是刚毕业的找工作的吧
第一,你这个主管有问题,C++有什么特性,他怎么不问地球一天跑多少公里,连一个参考物都没有。
我问楼主,相对于JAVA而言,C++有哪些特性
第二,就算是C++ 就那几个基本的特性,我认为其中内联也算不上,我们平常写内联函数并不一定就会被编译成内联函数,(LZ 可以做下实验,你写一个1000行的函数,标志为内联),并在一个文件中,调用几百次编译成功后,理论上编译器……



我觉得, 内联应该算啊, 你当然得用对啊。 不能说用不对它就不算特性了吧。

#49


引用 6 楼 loaden 的回复:
而指针:C语言就有的。

如果要说C里面没有,只有C++有的特性的话……
没想出来。
PS:inline,指针,这些C99都支持的

#50


我想了一个也是C有的特性,只是上面几个都没有提到:
内嵌汇编~~

#1


右值引用算不算?

#2


模板元,编译期计算算不算?

#3


没有虚函数的模板继承算不算?

呵呵,觉得这个问题很有意思。
关注中。

#4


这个主管指的是引用、内联、指针等这些语言设施。

#5


这个主管不傻,是你对C++的理解有些问题。

#6


引用 4 楼 supermegaboy 的回复:
这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。

#7


引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用、内联、指针这些东西部分原因是出于这样的考虑。

那个主管其实也是这样的意思。

#8


引用 7 楼 supermegaboy 的回复:
引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用、内联、指针这些东西部分原因是出于这样的考虑。

……

哦。正如C++0x引入右值引用,目的就是为了解决过多的临时对象创建一样。
学习了。

#9


关注中!!!1

#10


引用 8 楼 loaden 的回复:
引用 7 楼 supermegaboy 的回复:

引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用……


对!

#11


"C++有几种可以提高性能的特性"

与谁比较? 与C语言比较?

#12


如果回答 根据个人实力而定 是不是直接就被FIRE了?

#13


去看下《c++应用程序性能优化》

#14


引用 7 楼 supermegaboy 的回复:
引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。


在具有自定义复制构造函数和自定义赋值运算符重载的时候,频繁的类操作对性能的影响很大,BJ引入引用、内联、指针这些东西部分原因是出于这样的考虑。

那……


我前面强调了是C++相关的,也就是所有C语言的特性都排除在外

因此首先 指针特性肯定是排除在外, 因为指针是C语言就有的,不是C++的特性,嘻嘻

#15


虚函数,既是提高性能的特征,也是降低性能的特征,看你的运用能力的。

#16


而内联则不是,因为C语言支持内联。

#17


引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


C语言有内联函数么? 你用的是哪个版本的C语言这么强大

#18


引用 15 楼 taodm 的回复:
虚函数,既是提高性能的特征,也是降低性能的特征,看你的运用能力的。

同意

#19


我前面强调了是C++相关的,也就是所有C语言的特性都排除在外

因此首先 指针特性肯定是排除在外, 因为指针是C语言就有的,不是C++的特性,嘻嘻
--------------------------------------------------------------------
"C++有几种可以提高性能的特性"这句话并非指C++与其它语言的比较,而是指C++为降低类设计所带来的性能损失而做了哪些工作。

#20


引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


内联在获得函数抽象特性的同时使程序可能免于函数实现所带来的开销,这是C++为了提升性能所作的努力之一。类设计经常使用代码很少的方法,为了几句代码而付出的管理开销是不值得的,特别是当一个类很大时,如果没有内联,到处都是函数调用,对性能的影响是显而易见的。

#21


引用 17 楼 kingsyj 的回复:
引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


C语言有内联函数么? 你用的是哪个版本的C语言这么强大


C99借鉴了C++的内联函数。

#22


引用 19 楼 supermegaboy 的回复:
我前面强调了是C++相关的,也就是所有C语言的特性都排除在外

因此首先 指针特性肯定是排除在外, 因为指针是C语言就有的,不是C++的特性,嘻嘻
--------------------------------------------------------------------
"C++有几种可以提高性能的特性"这句话并非指C++与其它语言的比较,而是指C++为降低类设计所带来的性能……


如果仅仅是为了回答该问题而把C语言的特新引入进来已经背离了我发该贴的初衷, 恐怕我要命题修改了下了,
"C++有几种可以提高性能的特性(仅仅是C++语言的特性,C语言的不算)", 因为我发起这个帖子的目的就是想知道有在C++设计基础上,我们可以概括出多少种可以提高性能(补充一下,我这里所只的性能应该是程序运行的性能,而并非是设计,构架,管理上的性能,因此模板以及面向对象等等的因素貌似可以排除)的C++语言特性.因为我们目前讨论的就是C++

例如, 目前我能够想到的特性有, 内联, 引用(相对而言)

#23


c++ 的性能优化

#24


const关键字也算是一个吧,如果变量不需要修改,对于使用编译期常量为const赋值,编译器会优化为不占用内存。

#25


constC里面也有,同时,C里的static远比C++里的const更经济:外部的static仅在模块内有效,而且是const的。

真正说起来C++相对C性能提高的也就引用,模板的性能比不上结构宏,更重要的是模板使得最终实现变得很大,从内存装载角度上,仅此一项性能就降低了,而模板从来就没快过宏过,单从速度上,C++与C不存在优势。

C++与C相比的性能优势在于对大型系统的处理上:无论开发、维护、整合、排错,C++相对C更稳定快捷,效率更高,尤其是多语言混合编程时。毕竟单纯的运行速度差异与IO时间相比,几乎不具可比性。

#26


引用 22 楼 kingsyj 的回复:
例如, 目前我能够想到的特性有, 内联, 引用(相对而言)

为什么我提到的:右值引用、模板元 不算呢?
请Google之。

这段代码远比它乍看上去的简单。_bz_meta_vectorDot类模板使用了一个临时变量loopFlag来存放每一步循环条件的评估结果,并使用了一个完全特化版作为递归终结的条件。需要说明的是,和几乎所有元程序一样,这个临时变量作用发挥于编译期,并将从运行代码中优化掉。
  Todd是在Blitz++数值数组库的主要作者。这个程序库(以及MTL和POOMA等程序库)例证了模板元程序可以为我们带来更加高效的数值计算性能。Todd宣称Blitz++的性能可以和对应的Fortran程序库媲美。
  Loki程序库:活用模板元编程技术的典范
  模板元编程的价值仅仅在于高性能数值计算吗?不仅如此。Loki程序库以对泛型模式的开创性工作闻名于C++社群。它很巧妙地利用了模板元编程技术实现了Typelist组件。Typelist是实现Abstract Factory、Visitor等泛型模式不可或缺的基础设施。 

#27


右值引用就更不用说了。
程序只要用VS2010编译发布,性能就可以提升一个档次:其中一个原因就是“右值引用”。

多继承实现中无虚函数的模板继承经优化后,性能是虚函数的近10倍!
运行优化版本,性能优势一下体现出来了,模板实现是虚函数的十倍:

 ./cmp_test_optimize
virtual function test: looptime=100000000
using time :0.615542  second
template function test: looptime=100000000
using time :0.055584  second
virtual function test: looptime=100000000
using time :0.624778  second
template function test: looptime=100000000
using time :0.057419  second
virtual function test: looptime=100000000
using time :0.624977  second
template function test: looptime=100000000
using time :0.059442  second
        有点惊人是不是?这个差别就是因为虚函数是不可优化和内联的,而模板函数是可内联的,这个性能差异就很大,再次随着虚表的增大虚函数的调用是有性能退化 的,而这点对于模板函数来说是没有的,因为在编译时,这一切都是静态了。不过客观的说,虚函数多态是C++语言内置的,在复杂度方面,应该首选虚函数,这 里提供的这个方法只是作者在学习过程中的一个体会,模板的世界实在是太奇妙和高深了。


http://hi.baidu.com/msingle/blog/item/7ae38d36dbd16b3c0a55a957.html

#28


所以我所回答的,都被您无视,我感觉非常不理解!
大家觉得这个C++的问题傻不傻

#29


该回复于2011-05-09 11:21:14被版主删除

#30


哎啊  你是个悲剧。。。
那老板有没有录取你啊

#31


引用 17 楼 kingsyj 的回复:
引用 16 楼 taodm 的回复:
而内联则不是,因为C语言支持内联。


C语言有内联函数么? 你用的是哪个版本的C语言这么强大

C99 里早支持内联啦!

#32


关注高手

#33


引用 28 楼 loaden 的回复:
所以我所回答的,都被您无视,我感觉非常不理解!


您误解小生的意思了, 我并没有无视的意思

我仅仅是发表一点个人看法而已,嘻嘻

小生再发表一些戳见, 前面各位大虾们提到的一些C/C++新标准引入的特性都很高级,但这些特性是否能在所有平台都很好地被支持,并且已经被人广为接受并使用?

我还是希望能够收集到一些比较普遍并广为接受的特性

#34


引用 30 楼 liaowen123 的回复:
哎啊 你是个悲剧。。。
那老板有没有录取你啊


这是很久远的事情了, 由于那时候确实比较菜, 一时对这个问题没什么想法, 现在只是突发奇想, 想再次思考一下这个问题而已

其实, 我对这个问题有点质疑, 因为程序的性能根本上受开发者使用的构架设计, 算法, 数据结构, 及编程习惯方面的因素影响, 如果单从语言特性方面去考虑的话, 我们能够为程序提高多少性能,或者能否提高性能, 就算有所提高, 我们引入的这些特性是否对我们的项目管理及软件发转有利,这些因素都是需要考虑的.

小生举个例子, 内联函数确实可以提高性能, 是否就意味着我们应该尽可能多地使用内联, 如果是,那当我们发布我们的软件时, 代码也跟着发布出去, 这对软件的发展有利么? 况且, 内联编译会增加二进制文件的大小(虽然相对而言是微不足道的),但这种思想是否对软件管理有利?

恐怕这些因素都是需要考虑的, 因此我对这个问题质疑的本质是:

当考虑程序性能时,我们应该更多从软件构架设计, 算法数据结构等等这些方面去考虑, 如果光从语言特性去考虑, 请问,光C/C++这些特性能够给我们带来多少优化的空间?

#35


我现在写程序都是用C++,只有为别的开发人员提供API的时候,才会考虑来几句C--因为很多时候需要返回char*,char**之类的东西。

C++相对于C在运行效率上的降低,对于简单程序来说,影响不大;而对于复杂程序来说,C++的在开发效率和代码管理和维护上的优势又是C所不能比的。

因此,尽管会被大多数人鄙视,我还是尽量用C++。至于引用之类的东西,能用就尽量用;而至于模板之类的东西,能不用就尽量不用。

#36


关注中

#37


引用 35 楼 super_admi 的回复:
因此,尽管会被大多数人鄙视,我还是尽量用C++。


为什么会这么说, 我从来不觉得使用C++会遭人鄙视

#38


这也不是技术帖?
我想知道为什么这个帖子要从C++小版移到非技术区?

#39


都是高手啊!
马克一下- -

#40


该回复于2011-05-09 13:04:02被版主删除

#41


......

#42


最主要是因为C++太繁琐--相对于C来说。
就像某些资深人士,喜欢手动敲命令,而鄙视使用鼠标点击。

引用 37 楼 kingsyj 的回复:
引用 35 楼 super_admi 的回复:
因此,尽管会被大多数人鄙视,我还是尽量用C++。


为什么会这么说, 我从来不觉得使用C++会遭人鄙视

#43


函数的继承

#44


引用 6 楼 loaden 的回复:
引用 4 楼 supermegaboy 的回复:

这个主管指的是引用、内联、指针等这些语言设施。

哦,刚才我也考虑过引用。
不过我觉得引用还不如指针来得快。
而指针:C语言就有的。

C++中引用的实现方法就是指针。两者生成的汇编代码一模一样的。你可以查看下汇编代码。

#45


要是我我就先问清楚,面试官期待什么答案,开发速度?运行效率?或者其他方面?

#46


我能想到的是 引用(传参等), 右值引用(新C++标准的), 直接初始化(不知道是不是算C++的而不算C的特性),内联。。。。。

#47


楼主是刚毕业的找工作的吧
第一,你这个主管有问题,C++有什么特性,他怎么不问地球一天跑多少公里,连一个参考物都没有。
我问楼主,相对于JAVA而言,C++有哪些特性
第二,就算是C++ 就那几个基本的特性,我认为其中内联也算不上,我们平常写内联函数并不一定就会被编译成内联函数,(LZ 可以做下实验,你写一个1000行的函数,标志为内联),并在一个文件中,调用几百次编译成功后,理论上编译器会把这几百次地方换成那些代码
   然后LZ 你再把内联去掉,你再比较看看,他们有什么差异,
我们声明为内联的函数不一定会被编译成内联形式,而我们没有写内联的函数也不一定不会被编译成内联的,这取决于你的编译器,实际上内联只是鸡肋,只能是理论上的东西

#48


引用 47 楼 wtoufo000 的回复:
楼主是刚毕业的找工作的吧
第一,你这个主管有问题,C++有什么特性,他怎么不问地球一天跑多少公里,连一个参考物都没有。
我问楼主,相对于JAVA而言,C++有哪些特性
第二,就算是C++ 就那几个基本的特性,我认为其中内联也算不上,我们平常写内联函数并不一定就会被编译成内联函数,(LZ 可以做下实验,你写一个1000行的函数,标志为内联),并在一个文件中,调用几百次编译成功后,理论上编译器……



我觉得, 内联应该算啊, 你当然得用对啊。 不能说用不对它就不算特性了吧。

#49


引用 6 楼 loaden 的回复:
而指针:C语言就有的。

如果要说C里面没有,只有C++有的特性的话……
没想出来。
PS:inline,指针,这些C99都支持的

#50


我想了一个也是C有的特性,只是上面几个都没有提到:
内嵌汇编~~