没有。
嗯,有点是的,在存在谁考虑人们的意识new
中new int
是一个运营商。但是,这种观点(大部分)与标准不符。
首先,[lex.operators/1]
列出该语言的运算符。也不要愚蠢地认为它们只是“预处理运算符”;在词汇运算符的意义上,不存在这种区别。这也没有意义,因为您不能(例如)++
使用宏。
new
实际上是一个关键字(每个[lex.key/1]
)。
接下来,让我们看一下new-expression本身。这是事情变得更加艰难的地方。例如,以下措辞如下[expr.new/4]
:
相反,可以使用新运算符的显式括号括起来的版本来创建复合类型的对象
我认为这是一个编辑错误,因为它与上面提供的定义不一致,并且在该部分的其他任何地方都没有发生。
然后我们来讨论运算符重载。在其用于操作符声明的语法生成中,列出事物(包括new
)的终端称为操作符([over.oper.general/1]
)。我认为我们不必为此担心。语法中的终端名称从未打算引入术语的定义。毕竟,您具有并表示_不必是按位AND操作;它可以只是一个相等表达式:
and-expression:
等式
和 &
等式等式
像这样定义语法是很常见的,当然这并不意味着每个等式表达式都可以被视为对逐位AND运算符的调用。
最后,有人声称以下措辞(也在运算符重载部分中)证明,new
现在孤立地以某种方式神奇地成为了运算符:
运营商new[]
,delete[]
,()
,和[]
被从一个以上的令牌形成
我对他们说,不仅new
没有列出,而且显然是在更广泛的意义上使用“操作员”一词,即“可能超载的事物”,尽管new
它本身仍然不是操作员。它也在非规范性注释中,该注释应告诉您所有您需要了解的内容。
而且,正如您指出的那样,我们已经考虑operator new
了其他问题。
new
就是这样sizeof
。而且我认为大多数C ++社区都将其sizeof
视为运算符。sizeof
在描述其效果时,标准甚至会引用“运算符”。