问题标签 [name-lookup]

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 回答
470 浏览

c++ - 使用 xlC 从模板函数问题中查找静态函数

当我在寻找有关我在源代码中遇到的编译问题的线索时,我遇到了这个与函数查找相关的错误报告(针对 Mozilla 的 JavaScript 引擎源代码) 。引用错误报告:

TypedArrayTemplate (显然)是一个模板,它引用了 INT_TO_JSVAL,一个静态内联函数,没有前缀“::”。这会破坏 xlC,因为它无法解析 INT_TO_JSVAL。如果在模板参数的上下文中找不到非限定名称,则该标准不要求考虑静态。g++ 做这个后备,xlC 没有。

来自编译器的信息性消息:

在我的情况下,失败的代码类似于:

xlC 实现的行为真的正确吗?2003 年或 2011 年的标准在哪里谈论这个?

0 投票
1 回答
102 浏览

c++ - 库中命名空间的使用

我想知道是否需要在库中完全限定名称。

例如(为了便于阅读,我在此处缩进命名空间):

我没有完全理解 C++ 标准的 3.4 章,在 STL 向量头中看到了一些我无法解释的内容(为便于阅读而进行了简化):

问题是 _STD 扩展为 ::std:: .. 但根据我对名称查找的理解,reverse_iterator 将首先在向量中查找,然后在父命名空间中查找,即 std。怎么可能发生碰撞?

附属问题:在带有参数的模板函数中,名称查找规则是什么?我认为合格的 id 会直接查找已经声明的没有 ADL 的名称,但不合格的名称会执行 ADL,对吗?

预先感谢您的回答。

0 投票
1 回答
780 浏览

android - 在来电期间查找电话

我正在尝试构建一个类似于 True Caller 的应用程序。当来电时,我的应用程序需要连接到服务器以检索来电号码的联系人姓名,前提是它在客户端(电话)联系人中不可用。

我知道电话查找以搜索联系人和广播接收器以检查来电何时到来。

我想知道我的应用程序是否需要在来电时运行电话查找来搜索联系人?或者我们可以在Android默认在来电时搜索联系人姓名时检索相同的信息。如果是,请告诉我如何。如果不是,那么我的应用程序将运行电话查找。我相信如果我的应用程序运行电话查找,那将是多余的,因为 android 无论如何都会查找联系人姓名。

非常感谢

0 投票
4 回答
2227 浏览

c++ - find() 使用重载的 operator==

我尝试使用重载运算符==() 在向量中查找元素。但是,如果type1在以下代码中使用,则输出为 1 和 0(未找到)。Usingtype2给出 1 和 1。环境是 Xubuntu 12.04 和 g++ 版本 4.6.3。

0 投票
1 回答
205 浏览

c++ - 在模板中执行参数相关名称查找时的奇怪行为

最近我正在研究著名的“两阶段名称查找”对模板类中名称的确切含义。尽管我已经阅读了很多关于这方面的文章,但我仍然无法了解这方面的一切。现在我对下面显示的代码感到困惑:

请注意第二条评论。由于“f”是一个依赖名称,它的查找应该延迟到“main”函数中的实例化。那时,编译器应该在主函数的范围内执行参数依赖名称查找。我认为现在它应该发现命名空间 ns 中的函数,但它仍然发出编译错误:

有人可以向我解释一下吗?谢谢。

0 投票
2 回答
368 浏览

c++ - 朋友类声明和使用指令

以下示例格式正确吗?

此示例使用 Clang 3.5 成功编译,但使用 g++ 4.8.1 编译失败,原因如下:

C++11 标准§7.3.1.2 p3 说,

如果friend声明中的名称既不是限定词也不是模板标识,并且声明是函数或详细类型说明符,则确定实体是否先前已声明的查找不应考虑最内层封闭命名空间之外的任何范围。

例如,class A不是最内层封闭命名空间(即全局命名空间)的成员,而是class A通过 using 指令引入到全局命名空间中。

0 投票
1 回答
454 浏览

python-2.7 - 属性查找链中的 __getattr__ 顺序是什么?

所以为了摆脱一些样板,我选择实现__getattr__委派一些方法调用。问题是我在属性查找链中也有一个描述符,它们没有像我预期的那样交互。这是代码:

这就是问题所在。所有 Python 文档都提到__getattr__只有在通常的查找链失败后才被调用,但在这种情况下__getattr__总是在attr.

那么,什么是同时拥有一个描述符并__getattr__相互配合的正确方法呢?

这是我正在观察的:

问题解决了。事实证明,如果描述符引发异常,则查找会跳转到__getattr__.

0 投票
1 回答
1929 浏览

c++ - C++ 使用显式参数检测自由函数的存在

我正在编写一些类型特征,以查看是否存在具有特定参数集的自由函数。这些函数有一个看起来像这样的签名:

我提前知道TSomeClass和的值SomeType。如果这个函数完全存在这些参数,我希望特征返回 true,而不是使用任何隐式转换。

我可以很容易地编写一些代码来检测这个函数是否存在,通过使用 SFINAE 来尝试调用它,例如

并适当地测试这些函数的返回类型。由于我在这里将SomeClass( Y) 传递给函数,ADL 可以让编译器在适当的名称空间中查找,以免被func我为测试定义的虚拟版本混淆。

我在这里遇到的问题是,由于SomeType(Z在上面的测试中) 是通过常量引用传递的,所以它可以隐式转换为其他类型。例如,有人可以定义一个函数,例如:template <class T> void func( SomeClass &, double const & );对于任何算术类型 for Z,我的测试都会通过。我希望它只Z在真正的类型时才通过,在这种情况下是 a double

我试图通过在如下方案中使用函数指针来解决这个问题:

理论上这会很好用,但我遇到的问题是func测试不会看到以后定义的用户版本 - 它只看到func我需要定义的虚拟对象才能让编译器满意。不幸的是,我无法在SomeClass此处传递类型,因此 ADL 无法启动&func<X>以查找稍后定义的用户函数。

有什么办法可以做到这一点吗?该解决方案不必使用函数指针,它只需要是一个返回 true 的特征,如果某个自由函数存在且恰好具有一组提供的参数。

有关所需行为的参考:

0 投票
1 回答
102 浏览

c++ - A::N::f 标准在第 3.4.1/6 节的示例中讨论的最外层块范围是什么

3.4.1/6 中的示例

以下代码基于此示例。请注意,它会打印 1。如果我注释掉i = 1;它会打印 2。如果我再注释掉i = 2;它会打印 3,这表明无论 A::N::f 的最外层块范围是什么,如果您i在此范围上定义,编译器将在其他名称i之前找到该名称。

0 投票
4 回答
297 浏览

c++ - 如何在命名空间中应用名称查找

我不明白为什么以下代码会出错:

我的理解是搜索一个名称,编译器从当前范围开始并不断搜索封闭范围,然后是全局范围,直到找到正确的(正确意味着签名匹配或在方法的情况下可转换)一个,或者如果不存在则给出错误。所以起初我尝试不使用using namespace Ain BB::f然后按预期调用前两个调用,但f(s)出现错误。我认为封闭范围内的名称默认情况下对内部范围可见,但显然我错了。然后我放置using namespace A并认为f(10.5)会要求A::f更好的类型匹配,并且问题f(s)将得到解决,但事实并非如此(我的理解是using关键字将所有内容从正在使用的范围带到当前范围)。有人可以帮助我了解如何在此处应用名称查找,在此先感谢。

注意 我知道如何使它工作。我想知道为什么会这样?C++ 标准用易于理解的语言对此进行了说明。为什么我的理解是错误的?