C++匿名结构作为std::映射值

C++ anonymous struct as std::map value

本文关键字:std 映射 结构 C++      更新时间:2023-10-16

我使用的是Visual Studio 2019 std:c++17,它支持匿名结构,例如

struct S 
{ 
struct { int i; };
};

但是,以下代码存在编译错误。

map<int, struct { int i; }> m;

我可以使用匿名结构作为std::map的值类型吗?

你不能直接做,而是间接地,

struct { int i; } s;
std::map<int, decltype(s)> a;

using MyType = struct { int i; };
std::map<int, MyType> b;

但是注意CCD_ 1和CCD_。CCD_ 3与CCD_。

匿名结构是在另一个类(结构(中定义的结构。因此,您不能在容器中使用这样的结构,因为在这种情况下,它将不是一个匿名结构,而只是一个未命名结构。

在这个记录中(那是不正确的(

map<int, struct { int i; }> m;

不存在匿名结构。有人试图使用未命名的结构。

你可以写例如

#include <iostream>
#include <map>
int main()
{
using  S = struct { int i; };
std::map<int, S> m;
}

但正如我所说,没有匿名结构。

以下是匿名结构(C标准6.7.2.1结构和并集说明符(概念的定义

13结构类型且没有标记的未命名成员称为匿名结构;