1. ホーム
  2. c++

[解決済み] C++の一次式 - 一次式なのかそうでないのか?

2022-02-01 13:15:48

質問内容

  1. なぜquot;primary"と呼ばれているのですか?評価順で言うと、一番最初になるのでしょうか?

  2. C++03 は、5章(注1)の表現を標準的に定義している。

    式とは、計算を指定する演算子とオペランドの列のことである。

    そして、5.1 "一次式"で一次式のリストを定義しています。

    (1)一次式。

    literal
    
    this
    
    ( expression )
    
    id-expression
    
    

    3点目との関連で質問させていただきます。

    ( expression )
    
    

    つまり、規格によれば、括弧のついた式はすべて一次式であり、最初に計算されることになる。これは論理的に見えるし、C++の式における括弧の動作(優先順位)を正確に説明している。

    ということは、例えば

    (variable + 10)
    
    

    は一次式です。

    var = (variable + 10) * 3
    
    

    そして、私の理論によると、それはロジックに見えますが、私が知っている他のソースからは

    (variable + 10)
    
    

    は一次表現ではありませんが、なぜでしょうか?よくわからないのですが、標準では (expression) を一次式とする。

できないので、助けてください。どうもありがとうございます、そして私の悪い英語で申し訳ありません。 こんにちは。

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

C++の式は複雑になることがあります。つまり、演算子を使って組み合わせた式を入れ子にして、その入れ子の式も複雑になることがあるのです。

複雑な式をどんどん小さな単位に分解していくと、ある時点で、それ以上分解できないという意味で原子的な単位が残ります。これが一次式であり、識別子、リテラル、キーワード this そしてラムダ式。

しかし、C++規格が主要なものとして定義している非原子構造体が1つあることは事実です。それは、丸括弧(別名:括弧)で囲まれた式です。そのため (variable + 10) の例は一次式である(サブ式である variable (これは識別子である)、および 10 (これはリテラルです)。

評価順序において、原子式と同じような役割を果たすので、規格では一次式としているのだと思います。括弧の中にあるものは、後ろにある式の値が他の式と評価される前に評価されなければならない。で (5+10)*a の値は 5+10 の評価に入る前に評価されなければならない。 *a . [を意味するものではないことに注意してください。 5+10 が評価される前に、式 a が評価されます。という意味でしかありません。 5+10 は、乗算自体を評価する前に評価されなければなりません]。

つまり、括弧付きの部分式は、この意味で、あたかも原子であるかのように振る舞うのです。

だから、規格ではこの概念に対して「原子式」という言葉を使わないのでしょう。アトミックであるかのように振る舞うが、少なくとも括弧付きのものは実際にはアトミックではない。