问题标签 [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 回答
212 浏览

c++ - C++ 98 标准在哪里指定本地声明的模板名称不依赖?

根据此页面: http ://womble.decadent.org.uk/c++/template-faq.html#non-dependent “非依赖名称是那些被认为不依赖于模板参数的名称,加上名称模板本身和在其中声明的名称(成员、朋友和局部变量)”

这似乎得到了以下代码被认为是有效的事实的支持(LLVM/Comeau)

花一些时间阅读 C++ 98 标准后,我找不到指定此行为的位置。我希望在“temp.nondep”下找到提及这一点。

0 投票
2 回答
5786 浏览

c++ - C++ 模板的两阶段名称查找 - 为什么?

为什么 C++ 标准定义了模板的两阶段查找?难道非依赖声明和定义的查找也不能推迟到实例化阶段吗?

0 投票
1 回答
130 浏览

c++ - 通常的非限定查找和依赖于参数的名称查找(ADL)

对于不合格的名称查找,“通常不合格的查找”和“依赖于参数的名称查找”(ADL),我在标准中找不到哪个先发生?

同样,由于两者都试图向重载候选集添加一些东西,但顺序似乎并不重要。但是仍然很高兴知道哪个先发生。

谢谢

0 投票
2 回答
534 浏览

c++ - 使用限定类型实例化的模板内函数的名称解析

考虑以下 C++ 代码示例:

如注释中所示,模板实例化quux<n::A>()会导致编译器错误(在 GCC 4.6.3 上):

有人可以向我解释发生了什么吗?我本来希望它与quux<B>(). 它必须与何时foo被视为依赖有关。不幸的是,我的 C++ foo 还不够好。当foo(int)声明不存在时,该示例编译得很好,这也让我感到惊讶。

欢迎任何提示、解释和解决方法。

更新1:

我不想(读不能)foo(n::A)在定义之前移动声明quux(这将避免错误)。

更新 2:

感谢 David 指出相关问题Template function call 被在 template 之前声明的签名错误的函数混淆。Johannes Schaub 接受的答案 - litb 提出了一个包装类解决方案,在我的情况下也可以作为一种解决方法。但是,我对它并不是 100% 满意。

更新 3:

我通过将 in 的定义foo(n::A)放入 namespace解决了这个问题n。感谢 Jesse Good 和 bames53 的有用回答,他们不仅指出了标准的相关部分,还提供了替代解决方案。感谢 David Rodríguez - dribeas 在我没有正确理解所提出的解决方案时的解释以及所有其他贡献者。

0 投票
2 回答
293 浏览

c++ - 为什么 C++11 不支持这样的名称查找?

编译器抱怨:error C2065: 'X' : undeclared identifier

编译器知道构造函数的参数类型是什么,所以当我将 X 作为参数传递时,编译器应该知道它是一个有效参数。

我知道这不是 ADL(Argument-dependent Name Lookup,也称为 Koenig Lookup),但我认为它很有用且非常方便。因为我不必写如下:

我认为 ADL 规则应该推广到这种情况。

我对吗?

0 投票
3 回答
767 浏览

c++ - 命名空间范围内的运算符隐藏全局范围内的另一个运算符

这是编译器错误吗?

GCC 4.7 错误消息是:

如果您注释掉该行,它将编译:

0 投票
2 回答
90 浏览

c++ - 模板化函数名称查找难题 (ADL)

鉴于以下代码,为什么调用 Generic 函数而不是更具体的基于 SomeClass 的函数?

注意:如果我要从 " void foo(const SomeClass<T>*)" 定义中删除 const,则会调用所需的函数。我也尝试过重新排列 foo,尽管它没有任何影响。如果可能的话,请一些人引用标准中描述此特定 ADL 场景的相关区域。

带常量:http: //ideone.com/DIchLl

没有常量:http: //ideone.com/Iam4LV

使用 const(第 1 次):http: //ideone.com/W6PoJw

0 投票
1 回答
168 浏览

c++ - 使用模板参数重载 operator<< 时编译错误

我正在尝试使用 stl copy() 在地图中打印键值对。代码如下:

我正在尝试重载运算符<<。问题是代码不会编译,除非我将重载 operator<< 的定义用namespace std. 我认为这是由于 C++ 的名称查找机制,我仍然无法理解。即使我这样定义非模板版本:

它仍然不会编译。谁能解释为什么?

0 投票
2 回答
232 浏览

c++ - 函数解析中使用的多重继承顺序?

有一个关于继承和混合接口类的问题:
C++中接口的多重继承
导致我提出这个问题: 继承顺序是否影响函数解析规则?

鉴于:

以下是我的问题:

  1. Binary_Stream_Read_Write_IntfBinary_Stream_Write_Read_Intf一样吗?
  2. 在函数调用中可以用一个代替另一个吗?
  3. 它们都可以用于需要 a 的功能 Binary_Stream_Read_Intf吗?
0 投票
4 回答
163 浏览

c++ - 成员函数参数列表中的名称查找

在上面的代码中,我得到一个错误:

因为在c++ Primer,fifth edtion一书中,它说:

类定义分两个阶段处理:

1.首先编译成员声明。

2.函数体只有在看到整个类之后才编译。

但是在这里的代码中:

abc在参数列表中设置。但我没有得到那种错误,编译器工作得很好。为什么后面的代码不会给我任何类似于前者的错误?