f()が整数(int & f();
)への参照を返し、異なるf()+=5;
とf()=f()+5;
仮定して、その方法を説明し、この違いを説明するためにf()の疑似コードを与えます。
pがである場合int *p
、C++でのこれら2つのステートメントの違いは何ですか。
if (p!=NULL && *p !=0)....
if (*p !=0 && p !=NULL)....
最初に、f()
2つの静的変数とそれらの1つへの静的ポインターを宣言することができます。
次に、呼び出しごとに交互にそれらを返します。たとえば、(宿題なので擬似コード):
def f():
static var1 = 0;
static var2 = 42;
static pointer curr_var = reference of var1
if curr_var == reference of var1:
curr_var = reference of var2
else:
curr_var = reference of var1
return curr_var
さらに悪いことに:
def f():
static var1 = array[1024];
static idx = -1;
idx = (idx + 1) % 100
return reference of var1[idx]
*p
2番目の質問のヒントは、との違いp
です。たとえば、p
それ自体がNULLになる可能性がある場合は、2番目のものを使用しません。
f()+=5
呼び出しごとに異なる整数への参照が返された場合、 f()
= f()
+5とは異なる可能性があります。これは、呼び出されるたびに異なるグローバル変数から読み取られたf()
場合にのみ発生する可能性があります。f()
if (p!=NULL && *p !=0)
との違いif (*p !=0 && *p !=NULL)
は、最初のものp
がnullであるかどうかをチェックし、次にそれint
がp
指すがであるかどうかをチェックすることです0
。2つ目は、int
がp
指しているかどうかをチェックするだけです0
(そして、このチェックを2回実行します)。