为什么我不能像这样初始化struct?

时间:2016-04-21 02:00:25

标签: c++ c++11

struct Employee
{
    int age;
    double wage;
};

Employee joe;
joe = {2,60.0}; //using initialization list instead of doing Employee joe={2,60.0}

我在Visual Studio 2015中遇到编译错误,但是能够使用C ++版本C ++ 11在代码块中执行

2 个答案:

答案 0 :(得分:4)

它应该工作。

复制列表初始化

以下内容有效,名为copy-list-initialization

joe = {2,60.0};

事实上,正在初始化的右侧是临时的。看看this answer

如所提供示例的注释中所述,以下是初始化。更具体地说,copy-list-initialization。 (直到c ++ 11,它以前是 copy initialization,但是现在已经从c ++ 11开始接受了大括号):

Employee joe={2,60.0}

复制作业

或者您可以使用copy assignment

joe = Employee{2,60.0};

聚合初始化

定义变量时可以使用aggregate initialization

Employee joe{2,60.0};

答案 1 :(得分:1)

一种常用的方法是在C ++中正确地初始化struct,就像通过一个正确的构造函数一样:

struct Employee
{
    int age;
    double wage;

    Employee(int _age, double _wage): age(_age),wage(_wage) {}
};

然后,将其用作:

Employee joe(2, 60.0); // declaration and initialization.