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

How to know if some data type is from std?

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

Is there any list of types inside std namespace?

所有这些都在标准以及涵盖该标准的任何文档中提及。但是,我知道没有简单的列表。

How my program should know that string has prefix std:: and int doesn't.

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

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

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

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

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


I'm writing translator from uml diagram to c++ code

在我看来,您的翻译人员应该将 string 翻译成 string,将 std::string 翻译成 std::string。让图表的作者确保他们的名字是正确限定的。如果翻译器非要猜测,那么就会出现猜错的情况。