为什么new是C ++中的运算符

时间:2017-02-08 17:23:11

标签: java c++

我只是在operatorkeywords之间感到困惑。我知道这对编程无关紧要,但我想知道其中的区别。

In Java new被称为关键字。但是in c++ new被称为运算符,为什么?

4 个答案:

答案 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 ++提案允许用户重载点运算符!

很多这是区别,但没有区别。知道newnew[]做什么比了解它们是否被严格归类为运营商(虽然很清楚,但它们是),或者是否所有运营商都是是否关键字(我认为它们是,但我不确定)或所有关键字是否都是运营商(我不相信它们)。如果你找到一个案例研究,这些区别很重要,我很想知道它们。

答案 3 :(得分:1)

在我的理解中关键字是语言的保留字,而运算符是"实现语言功能"。

有些关键字也是运营商。

instanceof是关键字的另一个示例,也是运营商。

其他示例是算术运算符,+ - * % 也是运算符,但不是关键字

我相信它适用于大多数语言,Java,C ++和其他语言。