name-lookup相关内容

使用后申报

C++20标准草案N4861第节。6.5.1(7)内容: 在类的定义中使用的名称X在 应声明X的完整类上下文...在将其用于 类X或是X的基类的成员... 那么为什么要编译以下代码? #include struct X { X(const int i_) : i(i_) {} int f() const { return 3*g(); ..
发布时间:2022-07-18 10:27:24 C/C++开发

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

为什么 C++ 标准为模板定义了两阶段查找?非依赖声明和定义的查找不能也推迟到实例化阶段吗? 解决方案 他们可以.这是最早期的模板实现方式工作,并且仍然是 Microsoft 编译器的工作方式.有人感觉到(在委员会中)这太容易出错了;这太容易了不小心劫持了一个名字,在一个翻译中实例化unit 选择一个本地名称,而不是所需的全局符号.(一个典型的翻译单元将由一系列 #include 组成,声 ..
发布时间:2021-12-13 18:56:50 C/C++开发

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

当我调查 Qt 的源代码时,我看到 trolltech 人员明确使用 this 关键字来访问析构函数上的字段. inline ~QScopedPointer(){T *oldD = this->d;清理::清理(旧D);这-> d = 0;} 那么,这种用法有什么意义呢?有什么好处吗? 编辑:对于那些投票结束这个问题的人,我怀疑这种用法是用于某些类继承的情况 QScopedPoin ..
发布时间:2021-12-09 16:14:24 C/C++开发

什么是“参数相关查找"?(又名 ADL,或“Koenig Lookup")?

关于什么是参数依赖查找有什么好的解释?许多人也称它为 Koenig Lookup. 最好我想知道: 为什么这是一件好事? 为什么这是件坏事? 它是如何工作的? 解决方案 Koenig Lookup 或 Argument Dependent Lookup,描述了编译器如何在 C++ 中查找非限定名称. C++11 标准 § 3.4.2/1 规定: 当函数调用 (5 ..
发布时间:2021-12-01 14:48:04 C/C++开发

C++ 找不到命名空间外的函数

编译以下代码失败,因为第二个函数找不到第一个函数,即使它在命名空间之外.我自己无法弄清楚问题所在,到目前为止我还没有在网上找到任何答案. test.cpp: #include 结构我的类{};模板 std::ostream&运算符(5, 4);//这是第 13 行.}}int main() {返回0;} 编译器给出的错误(g++ test. ..
发布时间:2021-06-12 20:40:34 C/C++开发

模板类的二义性多重继承

我有一个真实的情况,可以在以下示例中进行总结: 模板 为什么对于编译器来说 B 是一个 TimeListener 并不明显,因此唯一可能的重载解析是 Notifier ? 解决方案 成员名称查找规则说你的代码不明确,因为名称在两个基类中找到,因此查找集无效.您不需要熟悉查找集和合并的所有细节;重要的细节是检查了两个基类并且在两者中都找到了名称 add_listener,这会造成歧义. ..

为什么在使用"using namespace std;"时在此代码中出现错误?和"bits/stdc ++.h"?

实际上,此代码在"DEV C ++"中可以正常工作,但是当我将其放入"Hacker-Rank"时,面板上会显示此错误“功能引用不明确",尽管所有在线编译器都显示错误... 我不认为这里的函数重载会在某个地方中断,因为此错误主要来自函数重载. #include#include#include使用命名空间std;int ..
发布时间:2021-05-09 19:56:49 C/C++开发

有关使用好友功能查找姓名的问题

我已阅读[basic.lookup.unqual]的标准部分,对此感到困惑: typedef int f;命名空间N {结构A {朋友作废f(A&);运算符int();无效g(A a){int i = f(a);//f是typedef,而不是Friend函数:等效于int(a)}};} 请考虑以上代码;我不明白为什么名称 f 是类型 int ,而不是 void f(A&).以我的理解,名称 ..
发布时间:2021-04-20 18:59:49 C/C++开发

定义模板后声明功能

假设我有一个模板函数: template void tfoo( T t ) { foo( t ); } 后来我想将其与类型一起使用,因此我声明/定义了一个函数并尝试调用它: void foo( int ); int main() { tfoo(1); } 我从g ++中收到错误消息: 在此范围内未声明 'foo',并且在实例化点[- ..
发布时间:2020-07-01 04:06:23 C/C++开发

为什么在C和C ++中相同标识符的大小不同?

#include int T; int main() { struct T { double x; }; printf("%zu", sizeof(T)); return 0; } 如果我在C中运行此代码,则结果为4,而在C ++中为8. 有人可以解释为什么有区别吗? 解决方案 简短的回答:实际上,因为它们不是相同的标识符. ..
发布时间:2020-07-01 04:06:19 C/C++开发