1. ホーム
  2. c++

[解決済み] new int;` の `new` は演算子として扱われるのか?

2023-05-12 16:45:42

質問

new int; のように int * x = new int; 新しい式 . 新しい演算子という用語は、例えばこの質問では、新しい式と同じように使われているようです。 新しい演算子」と「新しい演算子」の違いについて教えてください。

というキーワードは正しいのでしょうか? new というキーワードは演算子であると言えますか?なぜ、またはなぜそうではないのですか?

そうでない場合、新しい式を "新しい演算子" と呼ぶことを正当化する他の理由がありますか?

何が演算子を構成するのかについて、権威ある定義を見つけるのに苦労しています。

私はすでに 演算子 new はオブジェクトのメモリを確保し、"new expression" は最終的に operator new .

どのように解決するのですか?

newnew int は演算子とはみなされません。また ではなく 演算子とはみなされません。

C++ 標準は、「演算子」を構成するものに関して実に曖昧であり、一貫性がありません。レキシングやプリプロセッシングで定義された)演算子をリストアップする際、quot;punctuators" (以下のようなもの)と一緒にリストアップされます。 ( のようなもの)とともにリストアップされますが、一般的な句読点に関するルールはまったく示されていません。リストには new をキーワードと演算子の両方として挙げています。また sizeof をキーワードの集合に含め、演算子の集合には含めませんでしたが、後で演算子として参照しました。

ここでの要点は、C++ 標準委員会は字句の世界を演算子と非演算子に分離することに過度にこだわっていないということです。これは、その必要がないためです。すべての演算子、すべての非演算子に適用される文法規則はないのです。重要なセット、たとえば オーバーロード可能な 演算子のセットのような重要なセットは別々に与えられ、二項演算式のような文法規則は一度に一つずつ与えられます。

基本的に、quot;operator" は C++ 言語にとって形式的に意味のあるカテゴリではないので、カテゴリ的な答えはどのように感じるかに基づくことになります。あなたはそれを演算子と呼ぶことができますが、キーワード(または句読点!)と呼ぶこともでき、言語標準はあなたに同意しないでしょう。