如何知道某些数据类型是否来自 std?

How to know if some data type is from std?

提问人:lorakis 提问时间:12/30/2021 最后编辑:lorakis 更新时间:12/30/2021 访问量:77

问:

std 命名空间内是否有任何类型列表?我正在编写从 uml 图到 c++ 代码的翻译器,应该在需要时添加 std::。我的程序应该如何知道字符串有前缀 std:: 而 int 没有。

python c++ 类型 空间 std

评论

1赞 Barmar 12/30/2021
为什么需要在解析器中添加它?如果程序省略了命名空间前缀,则必须使用 ,并且将在命名空间中找到名称。using namespace std
6赞 Richard Critten 12/30/2021
你打算如何处理一个具有用户定义类型的程序,该程序也使用?vectorstd::vector
1赞 Barmar 12/30/2021
en.cppreference.com/w/cpp/header 列出了所有标准标头。您必须遍历所有这些名称才能获得它们定义的所有名称。
0赞 lorakis 12/30/2021
但添加并不是一个好习惯using namespace std
1赞 chepner 12/30/2021
严格来说,这不是解析器的工作。解析器获取那里的内容并构建一个语法树。确定前缀是否丢失以及在何处丢失将是执行语义分析的工作。std::

答:

0赞 eerorika 12/30/2021 #1

std 命名空间内是否有任何类型列表?

所有这些都在标准中提及,以及涵盖该标准的任何文档。然而,据我所知,没有简单的清单。

我的程序应该如何知道字符串有前缀 std:: 而 int 没有。

您的程序应该知道它不在命名空间中,因为它是一个关键字。您可以在标准的 [tab:lex.key] 表中找到所有关键字的列表。int

但是,仅仅因为标识符是 ,并不意味着它在命名空间中。例:stringstd

namespace not_std {
struct string {};
string s; // this isn't std::string
}

#include <string>
using std::string;
string s; // this is std::string

只有在后一种情况下,添加限定符才是正确的。std::


我正在编写从 uml 图到 c++ 代码的转换器

在我看来,你的翻译应该翻译成 .让图表的作者确保他们的名字是正确的。如果翻译人员必须进行猜测,那么就会有猜测错误的情况。stringstringstd::stringstd::string

评论

0赞 lorakis 12/30/2021
[tab:lex.key]正是我需要的,谢谢!