繁体   English   中英

C / C ++中的运算符与函数

[英]Operators vs Functions in C/C++

最近有人问我C ++标准运算符(例如new,delete,sizeof)和函数(例如tan,free,malloc)之间的区别。 “标准”是指编译器套件默认提供的,而不是用户定义的 以下是我给出的答案,但似乎都不令人满意。

(1)运营商不需要包含任何标头来使用它:例如,您可以拨打新电话而不包括任何标题。 但是,函数(比如free())确实需要包含头文件,强制执行。

(2)运算符在标准头中的某处定义为(即类操作符)。 功能不是。

你能批评这些答案并让我更好地了解它们之间的区别吗?

运算符是具有固定语法的关键字 可以重载的那些可能在语法上有所不同,但这是在边界内。 即使在重载时, new运算符仍然是new拼写,并且调用它的语法总是相同的。

函数名称是标识符 ,几乎可以是任意的。 没有语法上的理由你无法取消malloc()和使用

bool my_fancy_alloc(void*& memory, unsigned char size, bool zero_it);

代替。 (马克: 还有其他原因,但就像你的同工的理智。)

(1)并非严格属实。 typeid是一个运算符,但它的使用要求你包含<typeinfo>

我的答案只是运营商被定义为这样。 ::并不一定需要被视为运营商,但标准表明它是,所以它是。

如果你正在寻找一个更详细的答案,我会继续提到运营商大多看起来不像功能。 那些做[ sizeoftypeid ]的人不能充当职能; 它们的操作数不会在运行时进行评估。

编译器将运算符编译为一系列指令。

当代码调用一个函数时 ,它必须跳转到一段单独的代码

运算符具有特殊语法,例如,您可以使用new (或+ )而不在运算符名称后面的括号中放置参数。

操作员和功能在概念上是相同的。 它们都将一些值作为输入并返回一些作为输出。 他们唯一的区别就是语法。

我的理解函数名称是goto运算符的表示,在跳转到特定代码位置后,应用程序可以执行一个到多个工作单元,另一方面操作员执行实际的工作单元。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM