问题标签 [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.
c++ - C++ 98 标准在哪里指定本地声明的模板名称不依赖?
根据此页面: http ://womble.decadent.org.uk/c++/template-faq.html#non-dependent “非依赖名称是那些被认为不依赖于模板参数的名称,加上名称模板本身和在其中声明的名称(成员、朋友和局部变量)”
这似乎得到了以下代码被认为是有效的事实的支持(LLVM/Comeau)
花一些时间阅读 C++ 98 标准后,我找不到指定此行为的位置。我希望在“temp.nondep”下找到提及这一点。
c++ - C++ 模板的两阶段名称查找 - 为什么?
为什么 C++ 标准定义了模板的两阶段查找?难道非依赖声明和定义的查找也不能推迟到实例化阶段吗?
c++ - 通常的非限定查找和依赖于参数的名称查找(ADL)
对于不合格的名称查找,“通常不合格的查找”和“依赖于参数的名称查找”(ADL),我在标准中找不到哪个先发生?
同样,由于两者都试图向重载候选集添加一些东西,但顺序似乎并不重要。但是仍然很高兴知道哪个先发生。
谢谢
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 在我没有正确理解所提出的解决方案时的解释以及所有其他贡献者。
c++ - 为什么 C++11 不支持这样的名称查找?
编译器抱怨:error C2065: 'X' : undeclared identifier
编译器知道构造函数的参数类型是什么,所以当我将 X 作为参数传递时,编译器应该知道它是一个有效参数。
我知道这不是 ADL(Argument-dependent Name Lookup,也称为 Koenig Lookup),但我认为它很有用且非常方便。因为我不必写如下:
我认为 ADL 规则应该推广到这种情况。
我对吗?
c++ - 命名空间范围内的运算符隐藏全局范围内的另一个运算符
这是编译器错误吗?
GCC 4.7 错误消息是:
如果您注释掉该行,它将编译:
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
c++ - 使用模板参数重载 operator<< 时编译错误
我正在尝试使用 stl copy() 在地图中打印键值对。代码如下:
我正在尝试重载运算符<<。问题是代码不会编译,除非我将重载 operator<< 的定义用namespace std
. 我认为这是由于 C++ 的名称查找机制,我仍然无法理解。即使我这样定义非模板版本:
它仍然不会编译。谁能解释为什么?
c++ - 函数解析中使用的多重继承顺序?
有一个关于继承和混合接口类的问题:
C++中接口的多重继承
导致我提出这个问题: 继承顺序是否影响函数解析规则?
鉴于:
以下是我的问题:
Binary_Stream_Read_Write_Intf
和Binary_Stream_Write_Read_Intf
一样吗?- 在函数调用中可以用一个代替另一个吗?
- 它们都可以用于需要 a 的功能
Binary_Stream_Read_Intf
吗?
c++ - 成员函数参数列表中的名称查找
在上面的代码中,我得到一个错误:
因为在c++ Primer,fifth edtion一书中,它说:
类定义分两个阶段处理:
1.首先编译成员声明。
2.函数体只有在看到整个类之后才编译。
但是在这里的代码中:
我abc
在参数列表中设置。但我没有得到那种错误,编译器工作得很好。为什么后面的代码不会给我任何类似于前者的错误?