如何在C++类的初始化程序列表中初始化具有未命名结构的成员结构?
问题描述:
我有一个内部未命名结构的结构。我想初始化整个结构,它是类初始化列表中的成员结构。如何在C++类的初始化程序列表中初始化具有未命名结构的成员结构?
struct Foo {
int z;
struct {
double upper;
double lower;
} x, y;
};
class Bar {
Bar();
Foo foo;
};
可以这样做吗?
此结构还可以初始化“旧时尚”的方式提供一个没有统一初始化语法的构造函数吗?
struct Foo {
Foo() : z(2), x(/*?*/), y(/*?*/) {}
Foo() : z(2), x.lower(2) {} // doesn't compile
int z;
struct {
double upper;
double lower;
} x, y;
};
答
如果我理解正确,你要初始化struct Foo
,其中包含一个unnamed struct,在Bar
初始化列表:
#include <iostream>
struct Foo {
int z;
struct {
double upper;
double lower;
} x, y;
};
class Bar {
public:
Bar();
Foo foo;
};
Bar::Bar()
: foo { 1, { 2.2, 3.3}, {4.4, 5.5} }
{
}
int main()
{
Bar b;
std::cout << b.foo.z << std::endl;
std::cout << b.foo.x.upper << std::endl;
std::cout << b.foo.y.lower << std::endl;
}
答
如果我理解正确的话,你希望有一个静态初始化完整的结构包括内部的未命名的结构。
你有没有尝试过的东西如:当然
Foo foo { 1, // z
{1.1, 2.2}, // x
{3.3, 4.4}}; // y
。你有没有尝试过,你是如何失败的? – Rakete1111
你的内部结构定义是一个**未命名的结构**一个匿名结构略有不同,请参阅这里的区别:https://stackoverflow.com/a/14248127/8051589。 –
我很抱歉将未命名的结构与匿名混淆。我不知道新的C++ 11统一初始化语法。我改进了有关没有大括号的初始化的问题。 –