答案 0 :(得分:8)
new
是C ++中的关键字(参见C ++ 11 N3337 2.12 / 1中的表)。然后使用operator new
作为其实现,其副作用允许程序员创建自己的重载operator new
以注入自定义内存管理。
答案 1 :(得分:5)
关键词是语法结构。它们是解析器固有识别的特定字符序列,不能用作标识符。 if
是关键字。即使在C ++中,new
也是如此。
术语“运算符”用于标识用作表达式部分的内容。 +
是运营商;它作用于两个表达式并从中创建一个值。 new
也是运营商;它接受参数和typename +构造函数参数,并对它们执行各种操作,从而创建该类型的新对象。
但if
不是运营商。哦,当然,if
语句涉及表达式,但if
本身不是表达式的一部分。
答案 2 :(得分:3)
您的具体示例有点误导。 new
在C ++和Java中都是关键字和运算符。这些术语也没有严格定义:它们是在上下文中定义的。
keyword
是程序中出现的任何标记,由编译器定义(尽管用户可以通过调整编译器来设置自定义关键字,如果编译器允许的话)。像C / C ++中typedef
这样的东西是一个关键字,根据语言,基本类型也可以被视为关键字。关键字的通常表示符是编译器不允许在它们之后命名变量或函数(尽管该规则存在例外和警告)。
operator
是对您的数据或代码中的对象执行的任何操作。最基本的是与基本数据类型相关的算术运算符,如+ - * / % = == || &&
等。 new
(以及在C ++中,delete
)也是运算符,因为它们对目标对象执行特定任务(具体来说,它们分配和删除堆内存)。 .
(点)是一个运算符,甚至还有一些C ++提案允许用户重载点运算符!
很多这是区别,但没有区别。知道new
和new[]
做什么比了解它们是否被严格归类为运营商(虽然很清楚,但它们是),或者是否所有运营商都是是否关键字(我认为它们是,但我不确定)或所有关键字是否都是运营商(我不相信它们)。如果你找到一个案例研究,这些区别很重要,我很想知道它们。
答案 3 :(得分:1)
在我的理解中关键字是语言的保留字,而运算符是"实现语言功能"。
有些关键字也是运营商。
instanceof
是关键字的另一个示例,也是运营商。
其他示例是算术运算符,+
-
*
%
也是运算符,但不是关键字。
我相信它适用于大多数语言,Java,C ++和其他语言。