【发布时间】:2015-03-21 10:17:22
【问题描述】:
两种数组赋值有什么区别,一种在结构内,一种在结构外?
struct A
{
char s[4];
};
int main(int argc, char *argv[])
{
char s[4];
char d[4];
d = s; // 'invalid array assignment'
A a, b;
b = a; // compiles without problems
return 0;
}
默认运算符= 应该调用逐个成员的赋值运算符。如果是这样,那么应该存在一个数组赋值运算符,但编译器不想显式调用它。为什么?
【问题讨论】:
-
您的“间接数组赋值”是一种结构赋值,通常用于从函数返回固定数组并将所述结构作为值参数传递。
a.s = b.s显然同样会失败。 -
因为 C++ 有其疯狂的一面——这里的疯狂之处在于数组不是该语言的一等公民(例如,它们不可复制并且通常衰减为指针),因此结构复制必须具有一个特殊的规则,它说数组成员是按元素复制的。如果不是这样,而数组和其他类型一样,结构复制规则只会说“所有成员都被复制”。
标签: c++ arrays variable-assignment