7

C++03 3.10/1 によると、すべての式は左辺値または右辺値のいずれかです。変数に新しい値を割り当てるために使用する場合=、割り当ての左側にある変数名は左辺値式です。そして、変数で何をしようとしても、まだ何らかの式を使用しているように見えます。

式を使用する以外に C++ で変数を操作する方法はありますか?

4

3 に答える 3

2

唯一の方法はステートメントによるものですが、そのようなステートメントの一部である式によるものではありません。例は、定義ですstd::string x;。これにより、デフォルトの ctor on が呼び出されますx。しかし、これはあなたにとって操作と見なされますか?

実際には、他の多くのステートメントはありません。ループ制御ステートメントは、ループ制御式の副作用以外の方法でオブジェクト自体を変更することはできません。gotobreakそしてcontinueまったくできません。throwは式であり、catch()何も変更できないため、そのペアも無関係です。他に非式文はないと思います。

于 2012-12-10T15:19:08.257 に答える
2

式を使用せずに変数の値を設定することはできますが、取得する値を実際に選択することはできません。C++11 標準 (言語文法) の付録 A を読むと、宣言は式ではありません。int a;関数スコープで記述aすると、不定値が割り当てられます。ファイル スコープで書き込むとa、値 0 が割り当てられます。ただし、値を割り当てたり、コンストラクター引数を渡したりすることはできません。これを行うには式が必要なためです。

于 2012-12-10T15:19:15.987 に答える
0

質問に厳密に答えるかどうかはわかりませんが、変数を間接的に操作できます。例えば:

int a;
int *pA = &a;
*pA = 5;

ここでは の値aが変更されていますが、 を含む式はありませんa。式には のみが含まれpAます。

それ以外にも、意図的かどうかにかかわらず、変数の変更をもたらす無関係な操作の副作用がある可能性があります (意図せずに変数を変更するメモリの破損など)。

于 2012-12-10T15:05:20.720 に答える