C++结构值初始化

Arc*_*man 2 c++

我正在搞乱结构,并注意到以下两个例子,只有一个有效.他们来了:

struct Test
{ 
    char *name; 
    int age; 
}; 

Test p1 = { "hi", 5 };
//works


struct Test
{ 
    char *name; 
    int age; 
}p1; 

p1 = { "hi", 5 };
//error
Run Code Online (Sandbox Code Playgroud)

为什么第一个编译而第二个编译不?不是任何一种方式p1的对象Test?谢谢.

Joh*_*nck 5

在第一个示例中,您将在"大括号初始化" 中初始化具有两个值的结构.C++(或C)中不支持使用括号括起的列表分配给结构.

但是,您可以使用大括号初始化创建一个新结构,然后将其分配给旧结构(p).C++(和C)支持将一个结构分配给同一类型的另一个结构.

例如,在C++ 11中:

p1 = Test{ "hi", 5 };
Run Code Online (Sandbox Code Playgroud)