如果一元运算符的优先级接近最高,那么为什么#和##运算符的计算顺序未指定?

简单的问题:如果一元运算符的优先级接近最高,那么为什么#and##运算符的计算顺序是未指定的?与 C 和 C++ 相关。

C11(6.10.3.2 # 运算符):

# 和 ## 运算符的计算顺序未指定。

C++,N4713(19.3.2 # 运算符):

# 和 ## 运算符的计算顺序未指定。

回答

C++17 标准中的第 19 章标题为“预处理指令”。它解释了预处理器的工作原理。

顾名思义,预处理器在 C 或 C++ 的其余规则之前处理。所以运算符优先级不适用;这些不是导致表达式的运算符。预处理“操作员”###一个内#define宏定义不是C或C ++语言的部分。它们是 C/C++ 预处理器的一部分;它们不是 C++17 标准第 8.3 节中定义的“一元运算符”。

在预处理器评估和宏操作期间,没有表达式。只有一个标记序列,宏系统为它们定义了几个转换运算符(即,###)。C 和 C++ 的语法尚未参与该过程。

所以这个问题没有实际意义:它们的评估顺序是未指定的,因为它们与常规 C 或 C++ 运算符没有关系,并且标准说它们的顺序是未指定的。


以上是如果一元运算符的优先级接近最高,那么为什么#和##运算符的计算顺序未指定?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>