❥关于C++之语言特别与限制
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❥关于C++之语言特别与限制相关的知识,希望对你有一定的参考价值。
1.C++对于返回值的类型有一定的限制:不能是数组,但可以是其他任何类型——整数、浮点数、指针,甚至可以是结构和对象!(有趣的是,虽然C++函数不能直接返回数组,但可以将数组作为结构或对象组成部分来返回。)
2.传递常规变量时,函数将使用该变量的拷贝;但传递数组时,函数将使用原来的数组。实际上,这种区别并不违反C++按值传递的方法,函数仍传递了一个值,这个值被赋给一个新变量,但这个值是一个地址,而不是数组的内容。
数组名与指针对应是好事吗?确实是一件好事。将数组地址作为参数可以节省复制整个数组所需的时间和内存。如果数组很大,则使用拷贝的系统开销将非常大;程序不仅需要更多的计算机内存,还需要花费时间来复制大块的数据。
另一方面,使用原始数据增加了破坏数据的风险。在经典的C语言中,这确实是一个问题,但ANSI C和C++中的const限定符提供了解决这种问题的办法。
3.内联函数
inline double square(double x) // 不需要函数原型
return x * x;
程序员请求将函数作为内联函数时,编译器并不一定会满足这种要求。它可能认为该函数过大或注意到函数调用了自己(内联函数不能递归),因此不将其作为内联函数;而有些编译器没有启用或实现这种特性。
内联函数的编译代码与其他程序代码“内联”起来了。也就是说,编译器将使用相应的函数代码替换函数调用。对于内联代码,程序无需跳到另一个位置处执行代码,再跳回来。因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。如果程序在10个不同的地方调用同一个内联函数,则该程序将包含该函数代码的10个副本。
在C中,可以编写宏来完成相似的功能:#define SQUARE(X) ((X)*(X)),但这只是替换,宏也不能按值传递参数。这使得C++的内联功能远远胜过C语言的宏定义。如果使用C语言的宏执行了类似函数的功能,应考虑将它们转换为C++内联。
以上是关于❥关于C++之语言特别与限制的主要内容,如果未能解决你的问题,请参考以下文章