首页 > 解决方案 > 在 C++ 中,函数定义中的括号是运算符还是分隔符/标点符号?

问题描述

在这段代码中

void something () { /*something*/ }

是 () 分隔符还是运算符?

正如我在函数调用 () 中所知道的那样,运算符是:

something();

但是在函数定义中使用运算符会有点奇怪,因为运算符实际上是一个函数并且函数定义中有一个函数?

有人可以解释这个话题吗?分隔符/标点符号到底是什么?它们是编译器区分代码某些部分的标记吗?例如两个语句?

/*statement1*/;
/*statement2*/;

;s 将语句彼此分开

所以它们是编译器理解源代码的原子句法元素?

标签: separatorpunctuator

解决方案


取决于上下文。

()在 C++中可以同时满足两个定义(运算符和分隔符),或者一次只能满足一个。

它是一个运算符,因为()在语言规范中被字面定义为函数调用运算符。由于重载的运算符仍然是运算符,因此这与传递给它的参数的数量(零个或多个)无关。

(编程)语言方面的分隔符通常定义为将某些语言特征与其他语言特征分开的一个或两个标记。当您在调用函数时将参数传递给函数时就是这种情况,因为括号将函数名称与函数参数分开。如果在函数调用期间没有传递任何参数参数,则情况并非如此,因为没有什么可分离的。在这种情况下,()将充当运算符,但不充当分隔符。

我也几乎忘了提到圆括号也用于算术来表示优先级(充当分隔符,而不是运算符)的事实。

()充当运算符但充当分隔符的另一个示例是强制转换。


推荐阅读