我正在弄乱结构,并注意到以下两个例子,只有一个有效。他们在这里:
struct Test
{
char *name;
int age;
};
Test p1 = { "hi", 5 };
//works
struct Test
{
char *name;
int age;
}p1;
p1 = { "hi", 5 };
//error
为什么第一个编译而另一个编译?不管是p1
Test
的对象吗?感谢。
答案 0 :(得分:5)
在第一个示例中,在“大括号初始化”中初始化具有两个值的结构。 C ++(或C)中没有支持使用括号括起的列表将分配给结构。
但是,您可以使用大括号初始化创建一个新结构,然后将其分配给旧结构(p
)。 C ++(和C)支持将一个结构分配给同一类型的另一个结构。
例如,在C ++ 11中:
p1 = Test{ "hi", 5 };
答案 1 :(得分:2)
以下适用于C ++ 11:
(与g++ -std=c++11 init.cpp
编译)
#include <iostream>
struct XXX {
int a;
const char *b;
};
int main() {
XXX x;
x = XXX{1, "abc"};
// or later...
x = XXX{2, "def"};
std::cout << x.b << std::endl;
return 0;
}