0

Lisp では、任意の式を評価できます。C++ では、「式」、「値」、「評価」という概念が採用されています。

「式」、「値」、「評価」の関係がわからない場合は、C++ 標準 5.1 を参照してください。

?: は + 式と同じ式です。

どの式も評価して値を与えることができなければなりません。しかし?:、表現は必ずしもそうではないようです。

void f1() {}
void f2() {}

void test(bool b)
{
    b ? f1() : f2(); // OK. What's the value of this expression?
}

式には値が必要です。b ? f1() : f2();式です。その価値は何ですか?

説明はありますか?

更新と私自身の答え:

C++ 標準 5.1 からの抜粋:

式は値になり、副作用を引き起こす可能性があります。

4

5 に答える 5

2

式は値を持つことができます。すべての式に副作用があるわけではないのと同様に、すべての式に値があるわけではありません。式には型があります。type の式にvoid は値がありません (の値のセットvoidが空であるため)。

形式の式では、型はとcond ? expr1 : expr2の型に基づいて決定されます。と の両方がである場合、条件式のタイプは であり、値はありません。expr1expr2expr1expr2voidvoid

于 2013-09-16T09:29:09.683 に答える
1

の値はtrue ? f1() : f2()ですvoid。編集した部分から、主な質問は、void 型を式として見ることができるかどうかです。答えは YES です。

C++11 §3.9.1基本型セクション 9

型に値のvoid空のセットがあります。タイプは、void完了できない不完全なタイプです。値を返さない関数の戻り値の型として使用されます。任意の式を明示的に型に変換できますcv void(5.4)。void 型の式は、式ステートメント (6.2)、コンマ式のオペランド (5.18)、(5.16)の 2 番目または 3 番目のオペランド?:typeid、 のオペランド、または戻り型 を持つ関数の return ステートメント (6.6.3) void

Lisp の概念を C++ と比較してもあまり意味がありません。せいぜい、C++ の概念を、C、Objective C、Java などの他の C ファミリー言語と比較することができます。Lisp は、C ファミリー言語の「言語プール」の反対側にあるようなものです。

于 2013-09-16T08:03:27.383 に答える
0

三項演算子は式を評価します。この場合、 が に評価されてから評価されることを意味し、true何もしません (式は に評価されます)。truef1()void

voidこれが私たちが言語を持っている理由の1つだと思います。

詳しくはこちらの素敵な記事をご覧ください。

于 2013-09-16T07:17:23.280 に答える
0

値はf1()です。しかし、これと の関係についてあなたが言いたいことがわかりませんoperator+

于 2013-09-16T07:15:24.993 に答える