c++ 操作符或标点符号的哪些元素是标点符号?

lokaqttq  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(163)

我学习C++术语。我理解术语“标点符号”有困难。
例如,考虑https://eel.is/c++draft/lex.pptoken(重点添加):
每个被转换为标记的预处理标记都应该具有关键字、标识符、文字、或运算符或标点符号的词法形式。
这表明操作符和标点符号是不同的实体,对吗?
注意:在C中有标点符号(首先),其中一些标点符号是运算符。
所有标点符号的列表是什么?换句话说:operator-or-punctuator的哪些元素是标点符号?

r6l8ljro

r6l8ljro1#

一个详尽的列表不是特别有用,所以我不打算去那里。
但我会给予一个例子来说明基本的想法。
逗号(,)既可以是运算符,也可以是标点符号。下面是一个逗号作为运算符的例子:

for (int i=0; i<10; i++, j--)

i++, j--是单个表达式,在本例中,逗号是逗号运算符的示例,它先计算左操作数,然后计算右操作数,结果是右操作数生成的值(尽管在本例中忽略结果)。
您也可以在函数声明、定义或调用中使用逗号:

int f(int, double); // declaration
int g(long a, float b) { // definition
    return a + b;
}

x = f(1, 2); // call

在这些情况下,逗号只是充当标点符号--我们有一个用逗号分隔项目的项目列表。与逗号运算符不同,在这种情况下,逗号并不意味着任何关于求值顺序的内容,也不产生值。它只是列表中项目之间的分隔符。
还有许多其他地方可以使用逗号作为标点符号,例如在定义数组时:

int i[] = { 1, 2, 3, 4, 5 };

同样,这不是一个逗号操作符--它只是一个用逗号分隔的项列表。
另外,我会注意你正在看的句子的标点符号:
每个被转换为标记的预处理标记都应该具有关键字、标识符、文字或运算符或标点符号的词法形式。”
注意有逗号(!)在其他条目之间(例如,“一个关键字,一个标识符”),但不是在“运算符或标点符号”之间。这是因为在词法上,C和C++将“运算符或标点符号”视为单一类的东西。所以当词法分析器看到逗号时它并不试图区分这个逗号是运算符还是标点符号,直到你进入解析器,你才试图在它们之间做出决定。

相关问题