OK。我们知道以下代码无法编译。在赋值运算符函数中,隐式数组是memcpy
char source[1024];
char dest[1024];
// Fail. Use memcpy(dest, source, sizeof(source)); instead.
dest = source;
但是,下面的代码可以被编译并且行为正确。
class A {
char data[1024];
};
A source;
B dest;
dest = source;
我想知道,在运算符赋值函数中,数组是隐式的吗?
以下是完整的测试代码。
#include <cstdio>
#include <memory>
class A {
public:
char data[1024];
};
int main() {
{
A source;
A dest;
// Initialization
char *data = "hello world";
memcpy (source.data, data, strlen(data) + 1);
printf ("source.data = %s\n", source.data);
printf ("address source.data = %x\n", source.data);
// Works! Does this in the operator assignment function, memcpy is
// being performed implicitly on array.
dest = source;
printf ("dest.data = %s\n", dest.data);
printf ("address dest.data = %x\n", dest.data);
}
{
char source[1024];
char dest[1024];
// Initialization
char *data = "hello world";
memcpy (source, data, strlen(data) + 1);
printf ("source = %s\n", source);
printf ("address source = %x\n", source);
// '=' : left operand must be l-value
// dest = source;
// Works with memcpy.
memcpy(dest, source, sizeof(source));
printf ("dest = %s\n", dest);
printf ("address dest = %x\n", dest);
}
getchar();
}
//RESULT :
//source.data = hello world
//address source.data = 12fb60
//dest.data = hello world
//address dest.data = 12f758
//source = hello world
//address source = 12f344
//dest = hello world
//address dest = 12ef3c
关于[为什么C++支持结构中的成员数组赋值,但通常不是?](http://stackoverflow.com/questions/3437110/why-does -c-support-memberwise-arrays-arrays-within-structs-but-not-gene) – 2010-10-22 02:55:44
反对std :: string,是吗? – 2010-10-22 04:02:50