C++03 3.10/1 によると、すべての式は左辺値または右辺値のいずれかです。変数に新しい値を割り当てるために使用する場合=
、割り当ての左側にある変数名は左辺値式です。そして、変数で何をしようとしても、まだ何らかの式を使用しているように見えます。
式を使用する以外に C++ で変数を操作する方法はありますか?
C++03 3.10/1 によると、すべての式は左辺値または右辺値のいずれかです。変数に新しい値を割り当てるために使用する場合=
、割り当ての左側にある変数名は左辺値式です。そして、変数で何をしようとしても、まだ何らかの式を使用しているように見えます。
式を使用する以外に C++ で変数を操作する方法はありますか?
唯一の方法はステートメントによるものですが、そのようなステートメントの一部である式によるものではありません。例は、定義ですstd::string x;
。これにより、デフォルトの ctor on が呼び出されますx
。しかし、これはあなたにとって操作と見なされますか?
実際には、他の多くのステートメントはありません。ループ制御ステートメントは、ループ制御式の副作用以外の方法でオブジェクト自体を変更することはできません。goto
、break
そしてcontinue
まったくできません。throw
は式であり、catch()
何も変更できないため、そのペアも無関係です。他に非式文はないと思います。
式を使用せずに変数の値を設定することはできますが、取得する値を実際に選択することはできません。C++11 標準 (言語文法) の付録 A を読むと、宣言は式ではありません。int a;
関数スコープで記述a
すると、不定値が割り当てられます。ファイル スコープで書き込むとa
、値 0 が割り当てられます。ただし、値を割り当てたり、コンストラクター引数を渡したりすることはできません。これを行うには式が必要なためです。
質問に厳密に答えるかどうかはわかりませんが、変数を間接的に操作できます。例えば:
int a;
int *pA = &a;
*pA = 5;
ここでは の値a
が変更されていますが、 を含む式はありませんa
。式には のみが含まれpA
ます。
それ以外にも、意図的かどうかにかかわらず、変数の変更をもたらす無関係な操作の副作用がある可能性があります (意図せずに変数を変更するメモリの破損など)。