问题标签 [token-name-resolution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
699 浏览

java - java编译器如何解析非导入名称

考虑我X在包中的 java 编译单元中使用了一个类型,foo.bar并且X没有在编译单元本身中定义,也没有直接导入。java编译器X现在如何有效地解析?有几种可能X存在的地方:

  1. X可能通过星形导入导入a.b.*
  2. X可能与编译单元位于同一包中
  3. X可能是一种语言类型,即驻留在java.lang

我看到的问题尤其是(2.)。由于X可能是包私有类型,因此甚至不需要X驻留在名为X.java. 因此,编译器必须查看类路径的所有条目并搜索包中的任何类foo.bar,然后必须读取包中的每个foo.bar以检查是否X包含。

这听起来非常昂贵。特别是当我只编译一个文件时,编译器必须读取几十个类文件才能找到一个类型X。如果我使用大量星形导入,则必须对很多类型重复此过程(当然,类文件不会被读取两次)。

那么是否建议从同一个包中导入类型以加快编译过程?或者有没有更快的方法来解决X我找不到的未导入类型?

0 投票
1 回答
136 浏览

c++ - 关于重载运算符的 ADL 或命名冲突是否有不同的规则?

我认为这个例子最能说明我的问题:

我一直认为重载运算符就像函数一样,除了“调用语法”,如果你愿意的话。我只是在 ADL 或名称查找规则中注意到了上述差异(我不知道是哪一个)。

有人可以解释为什么bool operator==(const C& c, const C& x)找到但bool f(const C& c, const C& x)不是吗?

0 投票
3 回答
2444 浏览

c++ - 为什么 getenv() 可以在没有 std:: 的情况下解析名称?

getenv() 有一个 C++ 实现,可以包含在头文件中。所以它是命名空间std的成员。但是,即使没有 std::getenv(),也可以在我的代码中正确解析 getenv() 函数,这意味着我的后续程序可以编译和运行而不会出现任何错误和警告。那么为什么 getenv() 作为命名空间 std 的名称成员可以在没有 std:: 的情况下得到解析?我的操作系统和编译器分别是 Ubuntu 12.04 i386 和 g++ 4.8.1。

0 投票
1 回答
146 浏览

c++ - c++中定义上下文和实例化点之间的非依赖构造解释的差异

N4527 14.6 [温度分辨率]/p8

如果紧跟其定义的模板的假设实例化由于不依赖于模板参数的构造而格式错误,则程序是格式错误的;不需要诊断。如果在假设的实例化中对这种构造的解释与在模板的任何实际实例化中对相应构造的解释不同,则程序是非良构的;不需要诊断。[注意:这可能发生在以下情况下:

(8.1) — 在非依赖名称中使用的类型在定义模板时是不完整的,但在执行实例化时是完整的,或

(8.2) —实例化使用在定义模板时尚未定义的默认参数或默认模板参数,或

(8.3) — 模板实例化中的常量表达式求值 (5.20) 使用

(8.3.1) —整数或无范围枚举类型的 const 对象的值,

(8.3.2) — constexpr 对象的值或

(8.3.3) — 参考值或

(8.3.4) — constexpr 函数的定义,

并且在定义模板时未定义该实体,或者

那么,这些代码格式不正确吗?

代码1:

代码2:

Issue1850 定义上下文和实例化点之间的差异

模板中非依赖引用所引用的实体的各种特征可以在定义上下文和该模板的特化的实例化点之间发生变化。这些包括初始化(影响对象是否可以在常量表达式中使用)、函数和模板默认参数以及类型的完整性。关于这些是在定义上下文中检查还是在实例化点检查,存在实现分歧。如果这样的引用的有效性在两个上下文之间发生变化,则可能需要一个规则来使其格式错误,不需要诊断。

你能告诉我更多关于两个上下文之间非依赖名称的特征有何不同的例子吗?通常约为 8.2 和 8.3.1

0 投票
2 回答
365 浏览

c++ - C++ 使用静态名称解析还是动态名称解析?

我一直在阅读维基百科(名称解析 WIKI)中的“名称解析”,并且已经给出 C++ 使用“静态名称解析”。如果这是真的,那么我无法弄清楚 C++ 如何在不使用动态名称解析的情况下设法提供“多态性”。

谁能回答 C++ 是使用“静态名称解析”还是“动态名称解析”。如果是静态的,能否也解释一下 C++ 是如何提供多态性的。

0 投票
2 回答
448 浏览

c++ - C++ 自定义头文件 - 语法错误 C2061:标识符

我一直在研究语法错误 C2061 一段时间,我开始明白它通常是由头文件的循环依赖引起的。但是,我相信我应该在我的文件中解决这个问题,但我仍然遇到这个问题。

节点.h

头文件都包含在相应的 cpp 文件中。对此事的任何帮助将不胜感激!

编辑:下面的完整错误消息

0 投票
1 回答
458 浏览

c++ - 模板类的实例化点

该代码可以编译吗?

根据标准 14.6.4.1/4,在 CL 类定义之前立即实例化 TMPL

对于类模板特化,...,如果该特化被隐式实例化,因为它是从另一个模板特化中引用的,...。否则,这种特化的实例化点紧接在引用的命名空间范围声明或定义之前到专业化。

因此,CL::TP 在 TMPL 实例化点中不可见,但所有编译器(MSVC、gcc、clang)都可以正常编译。我还发现了一个缺陷报告http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#287,但显然没有被接受

0 投票
3 回答
73 浏览

c++ - 如何引用作为模板参数传递的派生类中定义的类型?

考虑以下示例:

用 GCC 编译它会出现以下错误:

如果已定义,为什么编译器会出错B::C以及如何修复它?

0 投票
2 回答
45 浏览

matlab - 在另见文档部分解决名称与内置函数的冲突

我有以下类,它有一个隐藏(或阴影)内置函数的方法。我希望文档包含一个“另见”部分,该部分链接到隐藏的内置函数。

不幸的是,“另见”链接只是试图为未记录的抽象方法提供帮助CatHelper/cat

如何指定我希望链接转到内置 cat函数?

0 投票
2 回答
866 浏览

c++ - “使用命名空间”如何在 C++ 中工作

我正在尝试理解 C++ 中的命名空间。我读到有两种访问命名空间变量和函数的方法。第一个是写 using ::,第二个是using在顶部使用 using 指令,而不是一次又一次地写它。我意识到第一种方法更好,因为第二种方法可能会导致冲突。

但是,我想知道第二种方法实际上是如何工作的。例如,如果我写using namespace std在顶部,编译器如何知道它必须std::在开头添加哪些函数以及它不需要添加哪些函数。如果我在 main 中编写了一个函数,首先它会在我的主文件中检查该函数,然后它将检查头文件(我在主文件顶部声明的)以进行函数声明。现在,根据我的理解,std 中的函数是在命名空间内声明的。所以,如果我不使用::.

那么,什么时候会std::在函数的开头添加 add 呢?