gpt4 book ai didi

c++ - 我无法理解结构如何替代 typedef

转载 作者:太空狗 更新时间:2023-10-29 20:10:13 24 4
gpt4 key购买 nike

请参阅此链接:https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(C4503)&rd=true它建议写:

// C4503b.cpp  
// compile with: /W1 /EHsc /c
#include <string>
#include <map>

class Field{};
struct Screen2 {
std::map<std::string, Field> Element;
};

struct WebApp2 {
std::map<std::string, Screen2> Element;
};

struct WebAppTest2 {
std::map<std::string, WebApp2> Element;
};

struct Hello2 {
std::map<std::string, WebAppTest2> Element;
};

Hello2 MyWAT2;

代替

// C4503.cpp  
// compile with: /W1 /EHsc /c
// C4503 expected
#include <string>
#include <map>

class Field{};

typedef std::map<std::string, Field> Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT;

但这些代码并不等同于 typedef Hello 是一个 std::mapstruct 只是一个结构有一个 map 字段,这意味着我不能互换使用它们。有人可以解释这个技巧吗?

最佳答案

你是对的,你不能互换使用它们。事实上,Microsoft 建议您这样做是为了从他们的角度克服技术难题:他们不能(或难以)处理超过 4096 字节的错位名称。

我相信,在大多数情况下,typedef 是比聚合更好的解决方案。

但是由于您的编译器有些局限,您可能会受困于他们的 hack。

关于c++ - 我无法理解结构如何替代 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41018495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com