我正在实施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;
}
我得到的是error:
prog.cpp: In function ‘void my_memset(void*, int, size_t)’:
prog.cpp:8: error: lvalue required as increment operand
当我将ptr的类型从void*
更改为int*
时,它compiles successfully。
为什么要求左值?
答案 0 :(得分:4)
void my_memset(void* ptr, int n, size_t size)
{
char *cptr = (char *)ptr;
char *limit = cptr + size;
for(; cptr < limit; cptr++) {
*cptr = n;
}
}
你不能通过这样的演员来增加,你不应该这样做。
答案 1 :(得分:2)
类型转换的结果不是左值。说,
float f = 3.14;
++((int)f);
这里我们将++
运算符应用于int值,但是我们没有要增加的int变量。因此,在一般情况下,类型转换不能产生左值。
答案 2 :(得分:0)
出于同样的原因,你不能这样做:
++someFunction();
或
++(a + b);
强制转换是一个表达式,表达式的结果没有可写存储。