【2】C与C++的兼容性有关问题,顺便问个有关问题,C和C++在效率有关问题上有哪些差异

【2】C与C++的兼容性问题,顺便问个问题,C和C++在效率问题上有哪些差异
如题。
是不是只有在OO特性现象上才会有性能差异?还是C++不管怎么写都比C差?

------解决方案--------------------
实现同样的OO特性,C++比C快。
不使用OO特性,C++和C一样快。
具体去看《深度探索C++对象模型》
------解决方案--------------------
关注, 不使用OO特性,C++和C一样快。//貌似C快,当然C++中你全写C的代码,那当然一样快了
------解决方案--------------------
C++代码写的好的情况下是比C慢不了多少的,

但总的来说在大部分情况下还是C要快一些的.

其实也是因为C和C++本身面向的开发就不同的原因.

C++一般用来做大型的对象操作等等,中间有许多的构造析构等过程,当然要慢一些.

而C一般用来处理非对象性质的操作,就没有那么多的构造析构时间.

但我觉得,有的东西,C++慢,但C做不了,还是要用C++去做

有的东西,C和C++都能做的,想要速度,就用C好了
------解决方案--------------------
稍微详细点说.
正常的c++类.不带virtual函数,不带virtual继承的.跟c里一样快.

当带上了virtual,就得付出点代价了.

------解决方案--------------------
【REF】
一般来说,C++写的程序总是比C的要慢,而且占用的体积要大。这是因为:
1。动态多态性在C++中是用虚拟函数表实现的;
2。C++中的函数和操作符很多都是在原有的C函数上加了一层,比如new 和 delete;
3。C++中的函数会在传递参数和返回值时构造临时对象,这额外的增加构造和析构函数的开销;
但是总体来说,差别不是很大。但是C++的抽象和表达能力是C远远不及的,也是任何其他编程语言远远不及的。在使用C++时,如果你对C/C++语言的底层机制比较了解的话,就应该在程序的性能瓶颈处的代码加以优化。这样才能写处好的程序。

C/C++/Perl/汇编/Java效率比较:
http://www.maikr.com/kan.aspx?id=cb73285e-b1c9-48e2-9ab1-0177bc9da430
------解决方案--------------------
BJARNE 在设计C++的时候,就把C++的性能看的很重要。C与C++的效率方面的差距不超过5%。
------解决方案--------------------
C/C++/Perl/汇编/Java效率比较:
http://www.maikr.com/kan.aspx?id=cb73285e-b1c9-48e2-9ab1-0177bc9da430

--------------------------------------

看过这篇了,还是有一些道理的。
不过这个例子只能做参考,在一些方面有意义,但不能成为语言效率的可靠依据。原因如下:
1、这个例子是以读取文件为基础的,读取文件的速度很大程度上依赖操作系统,而不是语言本身。
2、各语言使用了不同的读法。C和汇编时读入大缓冲区,而其他是读一行。对读文件的效率而言,缓冲区大小(从而影响读取次数)是关键因素。C比汇编快也因为它使用了更大的缓冲区。

因为这两点,这个例子的数据不足以说明语言的效率问题。但是它告诉我们,即使语言提供了多高的效率,很大程度上还要看使用方法。
------解决方案--------------------
1、你需要解决什么问题?哪种语言能够方便解决?
2、你需要怎样的效率?范围?精度?
3、你对两种语言的掌握程度如何?
4、是否有合适的性能分析和调节工具辅助支持你的研究?

不回答上面的问题,提这个问题是没有意义的。
------解决方案--------------------
没有拷贝构造函数的时候直接拷贝内容

有的时候调用拷贝构造函数
------解决方案--------------------
如果考虑到C++的inline,在某些情况下,效率会比C高,当然此时执行代码尺寸大不少。
构造函数的确是造成C++性能不及C的一个原因。但并非不写构造函数就能提高性能。因为有时编译器会偷偷地生成一个非平凡的构造函数:
class X
{
public:
string a;
};
所以,确切地说是pod类型,plain old data,比非pod类型效率高。