C ++ - 成员变量聚合初始化

时间:2017-10-11 18:05:31

标签: c++

在以下代码中:

class Class
{
private:
LUID luid;

public:
Class()
{
luid = { 0, 0}; // A. Does not compile
LUID test = {0, 0}; // B. Compiles
test = {1,1}; // C. Does not compile
}

为什么A和C不对,但B很好?

我为A和C得到的错误是:

错误C2059:语法错误:  '{'

错误C2143:语法错误:  失踪 ';'在'{'

之前

错误C2143:语法错误:  失踪 ';'在'}'之前

我认为它与C ++版本有关,虽然我不确定它使用的版本除了它不是很新。

1 个答案:

答案 0 :(得分:3)

语句LUID test = {0, 0}是使用初始化列表的局部变量的初始化;这是有效的,因为它在变量定义的过程中使用。相反,test = {0, 0}作业,因为test在其他地方定义。仅在特定情况下支持分配初始化列表(例如,在分配标量或特定类类型时(参见,例如braced-init-list assignment)。

其他情况,例如数组,不能分配,只是初始化:

typedef int LUID[2];

int main(){

    LUID t = { 10, 20 }; // compiles
    // t = { 10, 20};     // does not compile, since an array is not assignable

     return 0;
}