1

メソッドを実装していmemset()ます。以下はコード スニペットです。

void my_memset(void* ptr, int n, size_t size)
{
    unsigned int i;

    for( i = 0; i < size; ++i, ++(char*)ptr )
            *(char*)ptr = n;
}

次のようなエラーが表示されます。

prog.cpp: In function ‘void my_memset(void*, int, size_t)’:
prog.cpp:8: error: lvalue required as increment operand

ptr の型を からvoid*に変更するとint*、正常にコンパイルされます。

なぜ左辺値を求めているのですか?

4

3 に答える 3

2

型キャストの結果は左辺値ではありません。言う、

float f = 3.14;
++((int)f);

ここでは、++演算子を int 値に適用していますが、インクリメントする int 変数がありません。したがって、一般に、型キャストは左辺値を生成できません。

于 2012-08-20T11:44:15.917 に答える
0

あなたがこれを行うことができないのと同じ理由であなたはできません:

++someFunction();

また

 ++(a + b);

キャストは式であり、式の結果には書き込み可能なストレージがありません。

于 2012-08-20T11:49:00.683 に答える