Foo*_*ble 5 c++ visual-c++ visual-studio-2019
我有一个有 2 个成员的结构,它依赖第一个成员来计算第二个成员的值。
struct SomeStruct
{
int memberA = 0;
int memberB = memberA + 5;
};
int main()
{
auto SomeLambda = []()
{
SomeStruct x;
x = SomeStruct{};
};
SomeStruct x;
x = SomeStruct{};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想重新分配该结构以重新初始化它并重用变量名称。我可以在常规函数中执行此操作,但是如果我在 lambda 中执行此操作,则会出现以下编译错误。
main.cpp(12): error C2512: 'SomeStruct': no appropriate default constructor available
main.cpp(12): note: Invalid aggregate initialization
Run Code Online (Sandbox Code Playgroud)
如果我消除成员之间的相互依赖性,代码可以正常编译。
struct SomeStruct
{
int memberA = 0;
int memberB = 5;
};
Run Code Online (Sandbox Code Playgroud)
如果我更改 lambda 内的赋值以使用括号而不是大括号,这也允许代码编译。
SomeStruct x;
x = SomeStruct();
Run Code Online (Sandbox Code Playgroud)
然而 lambda 之外的赋值仍然使用大括号。
谁能告诉我为什么 lambda 内特定类型结构的分配无法在 MSVC 上编译?