【发布时间】:2017-02-08 17:23:11
【问题描述】:
【问题讨论】:
-
new两者兼有:对于语法分析,它是一个关键字,对于构建对象的内存图像,它是一个运算符。 -
c++中的运算符是关键字。
-
@PéturIngiEgilsson 这根本不是重复的。
【问题讨论】:
new 两者兼有:对于语法分析,它是一个关键字,对于构建对象的内存图像,它是一个运算符。
new 是 C++ 中的关键字(参见 C++11 N3337 2.12/1 中的表)。然后它使用operator new 作为其实现,其副作用是允许程序员创建自己的重载operator new 以注入自定义内存管理。
【讨论】:
new 列为运算符。
new 令人困惑,因为它是一个可重载的运算符,也是语言的一部分。要了解我的意思,请查看 en.cppreference.com/w/cpp/memory/new/operator_new 与 en.cppreference.com/w/cpp/language/new
关键字是语法结构。它们是解析器固有识别的特定字符序列,不能用作标识符。 if 是一个关键字。 new 也是如此,即使在 C++ 中也是如此。
术语“运算符”用于识别用作表达式的一部分的事物。 + 是运算符;它作用于两个表达式并从它们创建一个值。 new 也是一个运算符;它接受参数和类型名+构造函数参数,并对它们执行各种操作,从而创建该类型的新对象。
但if 不是运算符。哦,当然,if 语句涉及表达式,但 if 本身不是表达式的一部分。
【讨论】:
您的具体示例有点误导。 new 在 C++ 和 Java 中都是关键字和运算符。这些术语也没有严格定义:它们是根据上下文定义的。
keywords 是由编译器定义的出现在程序中的任何标记(尽管如果编译器允许,用户可以通过调整编译器来设置自定义关键字)。像 C/C++ 中的 typedef 这样的东西是关键字,根据语言的不同,基本类型也可以被视为关键字。关键字的常用符号是编译器不允许您在变量或函数之后命名变量或函数(尽管该规则有例外和警告)。
operators 是对代码中的数据或对象执行的任何操作。最基本的是与基本数据类型相关的算术运算符,如+ - * / % = == || && 等。 new(以及,在 C++ 中,delete)也是运算符,因为它们对目标对象执行特定任务(特别是分配和删除堆内存)。 .(点)是一个运算符,C++ 中甚至有一些建议允许用户重载点运算符!
不过,其中很多是没有区别的区别。知道new 和new[] 做了什么比知道它们是否被严格归类为运算符(虽然很清楚,它们是),或者所有运算符是否都是关键字(我认为它们是,但我不确定)或者是否所有关键字都是运算符(我不相信它们是)。如果您发现这些区别很重要的案例研究,我很想知道它们。
【讨论】:
new是一个运算符,为什么table of operators中没有它?
new 不是 Java 编程语言定义的运算符,但如果你到处说“new 是不是操作员”,实际上您传播的噪音多于信号。对于所有实际目的,new 是一个操作员,我对 Oracle 的建议是他们考虑修改该部分。
在我的理解中关键字是语言的保留字,而操作符是“实现的语言功能”。
碰巧有些关键字也是运算符。
instanceof 是另一个关键字示例,也是运算符。
其他例子是算术运算符,+-*%也是运算符,但不是关键字。
我相信它适用于大多数语言,Java、C++ 和其他语言。
【讨论】: