2015-12-15 213 views
2

我正在搞结构,注意到下面两个例子中只有一个有效。它们是:C++结构体初始值初始化

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

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


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

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

第一个编译器如何编译,第二个编译器不?是不是p1Test的一个对象?谢谢。

回答

5

在第一个示例中,您是正在初始化在“大括号初始化”中具有两个值的结构。对于,在C++(或C)中不支持使用大括号列表将赋值给结构。

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

例如,在C++ 11:

p1 = Test{ "hi", 5 }; 
+0

好的,是有意义的。谢谢。 –

+0

@RSahu:修正,谢谢。 –

+0

C的语法略有不同。我相信你需要类似'p1 =(struct Test){“hi”,5“}'。 – nimrodm

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; 
} 
+0

谢谢,这很酷。 –