在C ++中的函数定义中,括号是运算符还是分隔符/标点符号?

问题描述

在此代码

void something () { /*something*/ }

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

我在函数调用()中知道

是运算符:

something();

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

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

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

; s将语句彼此分开

那么它们是编译器理解源代码的基本语法元素吗?

解决方法

取决于上下文。

C ++ 中的

()可以

同时满足两个定义(运算符和分隔符),或一次仅满足一个定义。

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

用(编程)语言表示的分隔符通常定义为一个或两个令牌,用于将某些语言功能与其他语言功能区分开。在调用参数时将参数传递给函数的情况就是这种情况,因为括号将函数名称与函数参数分开。如果在函数调用期间没有传递参数实参,则不是这种情况,因为没有要分离的东西。在这种情况下,()将充当运算符,而不是分隔符。

我几乎也忘了提到一个事实,即在运算中还使用圆括号来表示优先级(充当分隔符,而不是运算符)。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...