重新初始化struct的成员

时间:2012-03-01 09:45:56

标签: c++ initialization visual-c++-2008

创建和初始化结构很容易......

struct S{ int x; bool b; };

S s = {123,false};

但是可以在现有对象上使用相同的技巧吗?或者这只是一次性的事情?

   S s = {123,false};
   s = {456,true}; //fails
   s = S(){456,true}; //fails

是否有语法技巧......显然我能做到:

   S s = {123,false};
   S temp={456,true};
   s = temp;

但我可以删除明确声明temp变量吗?

我应该补充一点,我正在研究VC ++ 2008,所以没有现成的C ++内容:(

5 个答案:

答案 0 :(得分:3)

没有。初始化是一次性发生。只有在创建和同时为创建的对象分配一些值时(即在一个语句中,才会进行初始化。

创建对象后,您只能为其指定新值。

简而言之,
您无法在C ++中重新初始化任何内容。您可以初始化对象,也可以分配它们。

一旦了解了这一事实,您就会发现有许多可能的解决方案,例如

  • 将结构成员传递给构造函数&创建它的结构对象
  • 重载=运算符以执行任何操作

答案 1 :(得分:2)

您可以在结构中添加构造函数,然后可以执行以下操作:

struct S
{
    S(int x_in, bool b_in): x(x_in), b(b_in) { }
    int x;
    bool b;
}

S s(123, false);
s = S(456, true);

答案 2 :(得分:1)

在c ++ 11中,您可以:

s = S({456, true});

答案 3 :(得分:1)

在C ++ 11中,您可以从初始化列表构造临时值并将其与赋值运算符一起使用。因此你可以写:

struct S {
    int x;
    bool b;
};

int main()
{
    S s = {42, true};
    s = {0, false};
}

答案 4 :(得分:0)

我不认为struct默认支持重新初始化。

 S s = {123,false};
   S temp={456,true};
   s = temp; //calls the = operator

也许你可以尝试重载赋值运算符

或者您可以尝试即时创建临时文件。

 S s = {123,false};

   s = S (456,true); // this should work i suppose