C ++结构值初始化

时间:2015-12-15 04:49:18

标签: c++

我正在弄乱结构,并注意到以下两个例子,只有一个有效。他们在这里:

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

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


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

p1 = { "hi", 5 };
//error

为什么第一个编译而另一个编译?不管是p1 Test的对象吗?感谢。

2 个答案:

答案 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;
}