创建和初始化结构很容易......
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 ++内容:(
答案 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