能否使用成员指针初始化C++结构体/联合体?
问题:通过成员指针显式初始化结构体/联合体的单个成员
我查阅了cppreference,未找到符合需求的用法。我希望显式初始化结构体/联合体的单个成员,因此无法使用U{value1,value2}这种声明列表语法(该语法对联合体也不适用)。我已有成员指针,想了解是否可通过它初始化结构体/联合体,且我的场景中联合体并非聚合类型。
示例代码及编译错误
union U { int a; double b; }; static constexpr inline auto a_ptr = &U::a; static constexpr inline auto b_ptr = &U::b; static constexpr inline U u1 = U{}; // 正常编译 static constexpr inline U u2 = U{.b = 1.0 }; // 此示例中正常,但仅适用于聚合类型U,需其他方案 static constexpr inline U u3 = U{.*b_ptr = 1.0 }; // 语法错误
上述代码编译失败,报错信息为:expected primary-expression before ‘{’ token,结构体场景下也会出现同样问题。
需要适配的非聚合类型场景
解决方案还需适用于以下包含用户定义析构函数的非聚合类型联合体场景:
union U { constexpr inline ~U() { // 假设内存泄漏已由外部处理 } int a; double b; std::string c; }; static constexpr inline U u = U{.c = "lorem ipsum" };
当存在等于&U::c的c_ptr时,需通过该指针完成对应成员的初始化。
内容的提问来源于stack exchange,提问作者notgapriel
相关产品推荐
相关产品推荐

