2017-02-08 8 views
2

私はちょうどoperatorkeywordsの間で混乱しています。これはプログラミングにとって重要ではないことは分かっていますが、違いを知りたいと思います。なぜnewはC++の演算子ですか

In Javanewはキーワードと呼ばれます。しかし、in c++newが演算子として呼び出されました。なぜですか?

+7

「new」は両方とも:文法解析のために、それはオペレータであるオブジェクトのメモリイメージを構築するためのキーワードです。 –

+0

可能な重複:http://stackoverflow.com/questions/17014747/diffrence-between-new-operator-in-c-and-new-operator-in-java – DrZoo

+4

C++での演算子_are_ keywords。 –

答えて

8

newはC++のキーワードです(C++ 11 N3337 2.12/1の表を参照)。それはその実装としてoperator newを使用します。その副作用は、プログラマーがカスタムメモリ管理を挿入するために独自のオーバーロードされたoperator newを作成することを可能にします。

+0

§2.11/ 1です。 §2.12/ 1は、演算子として 'new'をリストします。 –

+0

しかし、C++ではシンボルベースの演算子をオーバーロードすることもできます。したがって、シンボルベースの演算子と名前ベースの演算子の違いです。 – rcgldr

+0

@ChristianHackl、 'new'は、言語の一部としてだけでなく、オーバーロード可能な演算子であるという点で、混乱しています。私が何を意味するのかを知るには、http://en.cppreference.com/w/cpp/memory/new/operator_newとhttp://en.cppreference.com/w/cpp/language/newをチェックしてください。 – chris

1

私の理解では、キーワードは、言語の予約語「」ですが、オペレータは「実装された言語機能」です。

いくつかのキーワードも演算子です。

instanceofは、演算子でもあるキーワードの別の例です。

他の例では、算術演算子である、+-*%はあまりにもではなく、キーワード演算子です。

ほとんどの言語、Java、C++などに当てはまると思います。

5

キーワードは文法的な構造です。それらは、パーサが本質的に認識する文字の特定のシーケンスであり、識別子として使用することはできません。 ifはキーワードです。 newは、C++でもそうです。

「演算子」という用語は、式の一部として使用されるものを識別するために使用されます。 +は演算子です。 2つの式に作用し、それらから値を作成します。 newでもの演算子です。パラメータと型名+コンストラクタのパラメータをとり、それらに対してさまざまな操作を実行し、その型の新しいオブジェクトを作成します。

ただし、ifは演算子ではありません。確かに、ifステートメントには式が含まれますが、if自体は式の一部ではありません。

3

あなたの具体例は少し誤解を招くことがあります。 newは、C++とJavaの両方でキーワードと演算子の両方です。これらの用語も厳密には定義されていません。

keywordは、コンパイラによって定義されたプログラムに表示されるトークンです(カスタムキーワードは、コンパイラが許可している場合はコンパイラを調整することでユーザーが設定できます)。 C/C++のtypedefのようなものはキーワードであり、言語に応じて、基本型もキーワードとして扱うことができます。通常、キーワードの記号は、コンパイラが変数や関数の後ろに名前を付けることを許可しないことです(ただし、その規則には例外や警告があります)。

operatorは、コード内のデータまたはオブジェクトに対して実行されるアクションです。最も基本的なのは、+ - */% = == || &&のような基本データ型に関連付けられた算術演算子です。new(およびC++ではdelete)も、対象となるオブジェクト(具体的には、ヒープメモリの割り当てと削除)で特定のタスクを実行するため、演算子です。 .(ドット)は演算子であり、ドット演算子のオーバーロードをユーザーに許可するC++にはいくつかの提案があります。

これは多くの違いがありません。 newnew[]がオペレーターとして厳密に分類されているかどうか(明確であるとは言えますが)、またはすべての演算子がキーワードかどうかを知ることよりも便利です(私はそうだと思いますが、私は確信していません)、またはすべてのキーワードが演算子であるかどうか(私はそれらが信じられません)。それらの区別が関係するケーススタディを見つけたら、それらのことを知りたいです。

+0

Javaが 'new'を演算子とみなすならば、それは[演算子の表](http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls- 3.12)? – meriton

+0

@meritonオラクルは何らかの理由でC++よりも「演算子」という単語の定義が狭いと思われるため、除外します。これは、 "トマトは野菜ではない"引数の1つです。厳密には技術的な意味では、「新しい」はJavaプログラミング言語で定義されている演算子ではありませんが、 "new"実際には信号よりも騒音が広がっています。すべての*実用的な目的のために、 'new'は演算子であり、Oracleへの私の助言は、それらのセクションを改訂することです。 – Xirema

関連する問題