[入门] C++的内联函数inline
kennes
2007-07-21
D语言不支持C++的内联函数inline,是不是说明同样的代码没有C++效率高呢,还是D有别的方式来取代C++内联函数incline?
|
|
qiezi
2007-07-21
inline只是个关键字,不是说没有这个就不能inline了,D语言代码声明和实现在一起,更容易inline。
另外,语言的效率通常和库不能完全分开,C++在裸语言上效率的确很高,但只要使用库去包装就会很成问题。拿STL来说吧,如何把一个栈上数组转成vector以方便使用?免不了要在堆(或池)上分配空间并复制数组,对D来说数组相对是很轻量级的,当然C++也可以做到这点,不过对于数组的slice进行0拷贝恐怕还是无能为力。STL中的string::substr免不了要复制数据,而D却可以利用GC的优势免去复制的成本。如何从函数返回一个大对象?虽然有RVO但C++并不能在任何场合做到0拷贝,D/java这类语言却可以轻松new一个对象并返回来,成本只是指针拷贝。栈上对象可以免去从堆上分配的成本?D也支持struct,结果就是D的选择更多。 |
|
oldrev
2007-07-21
inline还是不inline是编译器决定的,在C++中inline其实跟register差不多,快被废弃了
|
|
kennes
2007-07-21
这么快就解答,非常感谢qiezi和oldrev。
我是被D语言的太好的功能改进给吸引了。 |