问题标签 [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 投票
1 回答
149 浏览

c++ - 来自 iso C++ n3290 的一点:依赖于参数的名称查找:

来自 iso C++ n3290 的一点:依赖于参数的名称查找:第 3.4.2 节,第 4 段

在这里,与 2003 年早些时候的标准相比,他添加了第 3 点。任何人都可以解释它是如何可能的......用一个例子来解释......(重载)..

而且他还说,在第二点中,他包括了朋友功能模板(我知道noraml calss朋友功能)..任何人都可以解释一下,这就是那个satatement。

0 投票
3 回答
236 浏览

c++ - ISO C++ 草案 - 3.4.2/3 - 参数相关名称查找

ISO C++ 草案 (n3290) 中的一点:

3.4.2/3 参数依赖名称查找:

X是由非限定查找(3.4.1)Y生成的查找集,让 是由参数相关查找(定义如下)生成的查找集。如果X包含

  • 类成员的声明(#1)或
  • 不是使用声明(#2)的块范围函数声明或
  • 既不是函数也不是函数模板的声明(#3)

然后Y是空的。否则Y是在与参数类型关联的命名空间中找到的一组声明,如下所述。通过名称查找找到的声明集是和 的X并集Y

是否有演示涉及#1、#2 和#3 的 ADL 的示例代码片段?

0 投票
2 回答
2434 浏览

c++ - 模棱两可的注入类名不是错误

我在 C++ 标准中读到的关于注入类名的内容与我将很快介绍的示例程序的行为相矛盾(如我所见)。这是我读到的:

  • 从 3.4(第 3 段)

    出于名称隐藏和查找的目的,类的注入类名称(第 9 条)也被认为是该类的成员。

  • 从 9 开始(第 2 段)

    类名被插入到在看到类名之后立即声明它的作用域中。类名也被插入到类本身的范围内;这被称为注入类名。出于访问检查的目的,注入的类名被视为公共成员名。

从这些我了解到,以下是一个格式良好的翻译单元,它编译成功。

但是,我认为以下应该产生错误,但它没有

由于名称vector被注入到两者中std::vector<int>并且std::vector<char>好像是一个公共成员名称,那么它应该被 X 继承,因此vectorin 中的名称X应该是模棱两可的。我错过了什么吗?

PS我正在使用MSVC9.0

0 投票
2 回答
325 浏览

c++ - 具有继承的嵌套类的名称查找

这是否保证工作:

它似乎适用于VS2010。显然它依赖于微妙的声明顺序/名称查找规则,所以我想知道标准对此事有何规定......

0 投票
2 回答
335 浏览

c++ - 混淆理解虚函数调用和依赖基类

我正在阅读电子书模板完整指南和问题,我要问的问题对你来说可能很愚蠢,但是..

我无法理解9.4.2 Dependent Base Classes中的部分内容。

这是其中的部分文本:http ://tinypaste.com/633f0

我需要帮助可视化上述文本中的行(或问题域)“必须小心使用此解决方案,因为如果使用非限定的非依赖名称来形成虚函数调用,那么限定会抑制虚拟调用机制和含义程序发生变化。尽管如此,在某些情况下无法使用第一个变体,而这种替代方案是合适的”

我理解不合格的非依赖名称等,但将它们与虚函数调用混合是我所无法理解的。

0 投票
2 回答
3862 浏览

c++ - 在模板派生类中,为什么我需要在成员函数中使用“this->”来限定基类成员名称?

在我研究 Qt 的源代码时,我看到 trolltech 的家伙明确地使用this关键字来访问析构函数上的字段。

那么,这种用法有什么意义呢?有什么好处吗?

编辑:对于那些投票支持关闭这个问题的人,我怀疑这种用法是针对某些类继承情况的

QScopedPointer 类定义的一部分:

0 投票
6 回答
1960 浏览

c++ - 模棱两可的成员访问表达式:Clang 是否拒绝有效代码?

我有一些代码,就这个问题而言,归结为

我试图用两个编译器的几个版本来编译它。GCC 4.2、4.4、4.6 毫无怨言地接受它。截至 11 月 14 日的 Clang 2.9 和 SVN 主干拒绝它,并显示以下错误消息:

哪一个是错的?我可以通过更改来解决 Clang

但我想对何时可以省略模板参数的理解充满信心。


编辑:我曾认为歧义是在TemplateClass. 以下代码使用 GCC 和 Clang 编译,质疑该假设:

0 投票
4 回答
33207 浏览

c++ - 什么是“依赖于参数的查找”(又名 ADL,或“Koenig 查找”)?

关于什么是参数依赖查找有什么好的解释?许多人也将其称为 Koenig Lookup。

最好我想知道:

  • 为什么这是一件好事?
  • 为什么这是一件坏事?
  • 它是如何工作的?
0 投票
1 回答
440 浏览

c++ - 模板实例化的范围解析

我有以下一组类(对我的真实情况的最小复制):

我希望该成员Parent::B::myA应该被明确地解析为 type Parent::A。但是,在我的项目的其他地方,我有这个:

在 MSVC 2003 下编译失败:

如果我在声明中明确说明,代码将编译B::myA,即Parent::A myA;。但是,代码在gcc-4.3.4下编译。这仅仅是 MSVC 2003 的一个错误,还是我真的应该担心我的模板可能被实例化的范围?

0 投票
1 回答
2304 浏览

c++ - 模板特化的朋友声明失败

以下包含朋友声明的代码失败并显示错误(请参阅http://ideone.com/Kq5dy):

如果友元声明和成员函数声明的顺序相反,则代码编译没有问题(参见http://ideone.com/y3hiK):

如果朋友声明不包含模板特化,则不会发生这种情况:非模板朋友是可以的,以及模板朋友。在模板特化中使用限定名也可以编译代码。我的问题是为什么第一个例子失败了?似乎编译器在朋友声明时在​​类范围内查找名称并且仅用于模板专业化?标准在哪里规定了这种行为?