[解決済み] C++の一次式 - 一次式なのかそうでないのか?
質問内容
-
なぜquot;primary"と呼ばれているのですか?評価順で言うと、一番最初になるのでしょうか?
-
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
は、乗算自体を評価する前に評価されなければなりません]。
つまり、括弧付きの部分式は、この意味で、あたかも原子であるかのように振る舞うのです。
だから、規格ではこの概念に対して「原子式」という言葉を使わないのでしょう。アトミックであるかのように振る舞うが、少なくとも括弧付きのものは実際にはアトミックではない。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】C++11のラムダ式って何?
-
[解決済み] C++17でi = i++ + 1;が合法になったのはなぜですか?
-
[解決済み] C++11でsafe-boolイディオムは廃止されますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】C++の余分な資格エラー
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む