Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么C+中的运算符是new+;_Java_C++ - Fatal编程技术网

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

Java 为什么C+中的运算符是new+;,java,c++,Java,C++,我只是把操作符和关键字搞混了。我知道这与编程无关,但我想知道两者的区别 new称为关键字。但是新< /Calp>被称为运算符,为什么?< /P> < P> 新< /Cord>是C++中的关键字(参见C++ 11 N337 2.12/1中的表)。然后它使用operator new作为其实现,其副作用是允许程序员创建自己的重载operator new,以注入自定义内存管理。在我的理解中关键字是语言的保留字,而操作符是“实现的语言函数” 碰巧某些关键字也是运算符 instanceof是关键字的另一个示

我只是把
操作符
关键字
搞混了。我知道这与编程无关,但我想知道两者的区别


new
称为关键字。但是<代码>新< /Calp>被称为运算符,为什么?< /P> < P> <代码>新< /Cord>是C++中的关键字(参见C++ 11 N337 2.12/1中的表)。然后它使用
operator new
作为其实现,其副作用是允许程序员创建自己的重载
operator new
,以注入自定义内存管理。

在我的理解中关键字是语言的保留字,而操作符是“实现的语言函数”

碰巧某些关键字也是运算符

instanceof
是关键字的另一个示例,也是一个运算符

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


我相信它适用于大多数语言,爪哇,C++等。

< P>关键字是语法结构。它们是解析器固有识别的特定字符序列,不能用作标识符<代码>如果是关键字。所以,<代码>新< /C> >,甚至在C++中。

术语“运算符”用于标识用作表达式一部分的事物<代码>+是一个运算符;它作用于两个表达式并从中创建值
new
也是一个操作符;它接受参数和typename+构造函数参数,并对它们执行各种操作,从而创建该类型的新对象


但如果不是操作员,则为
。哦,当然,
if
语句涉及表达式,但是
if
本身不是表达式的一部分。

您的具体示例有点误导<在C++和java中,代码> < < /代码>都是关键字和运算符。这些术语也没有严格定义:它们是上下文定义的

keyword
s是出现在由编译器定义的程序中的任何标记(不过,如果编译器允许,用户可以通过调整编译器来设置自定义关键字)。C/C++中类似于
typedef
的东西是一个关键字,根据语言的不同,基本类型也可以被视为关键字。关键字的通常含义是编译器不允许您在变量或函数之后命名它们(尽管该规则存在例外和警告)

operator
s是对代码中的数据或对象执行的任何操作。最基本的是与基本数据类型相关联的算术运算符,如
+-*/%===| |&&
等<代码> < < /代码>(和C++中的代码<代码> <代码> >也是运算符,因为它们对目标对象执行特定任务(具体地说,它们分配和删除堆内存)。<代码> ./COD>(DOT)是一个运算符,甚至有一些C++中的建议允许用户重载点运算符!
不过,这其中有很多是没有区别的区别。知道
new
new[]
做什么比知道它们是否被严格归类为运算符(虽然很清楚,它们是),或者所有运算符是否都是关键字(我想是,但我不确定),或者所有关键字是否都是运算符(我不相信它们是)。如果你发现一个案例研究中这些区别很重要,我很想知道它们。

new
两者都有:对于语法分析来说,它是一个关键词,为了构造对象的内存映像,它是一个运算符。可能的副本:C++中的运算符是关键字。2.2.12/1列出了<代码>新< /代码>作为操作符。但是C++还允许重载基于符号的运算符。因此,区别在于基于符号的运算符与基于名称的运算符。@ChristianHackl,
new
令人困惑,因为它是一个可重载的运算符,也是语言的一部分。要了解我的意思,请查看vs.@chris:然而,我刚刚提到了正确的来源。至少在N4296草案中。“ChigsHaCl是否添加了对我引用的标准文档的引用。如果java考虑了<代码>新< /代码>运算符,为什么?为什么?”Melion Oracle没有任何原因,似乎比C++更窄地定义了“操作符”一词,因此排除了它。这是一个“西红柿不是蔬菜”的论点,从严格的技术意义上讲,不,
new
不是Java编程语言定义的运算符,但如果你到处说“
new
不是运算符”,你实际上传播的噪声比信号还要多。对于所有实际用途,<代码>新< /Cord>是一个运算符,我对Oracle的建议是考虑修改该节。