您可以在 C++11 中执行此操作,但这不是初始化 - 它是赋值。
http://coliru.stacked-crooked.com/a/819b79c4ee428537
#include <iostream>
using namespace std;
struct S
{
int a;
};
int main()
{
S b;
b={1};
cout << b.a;
b={2};
cout << b.a;
return 0;
}
注意,VS2010 和 VS2012不支持初始化列表
编辑:顺便说一句,您可以将您的代码转换为:
Ref refType(string strRef) {
if (regex_match(strRef.begin(), strRef.end(), rxIdentifier)) {
Ref ref = { Var, strRef };
return ref;
} else if (regex_match(strRef.begin(), strRef.end(), rxConstant)) {
Ref ref = { Const, strRef };
return ref;
}
}
另一种方法是使用 Boost.Optional,但在这种情况下您需要构造函数:
Ref refType(string strRef)
{
boost::optional<Ref> ref;
if(strRef=="1")
{
ref=Ref(Var,strRef);
}
else
{
ref=Ref(Const,strRef);
}
return ref.get();
};