问题标签 [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++ - 引用基类时是否需要命名空间
我有这样的代码:
我是否需要 Derived 引用它的基类的命名空间限定符?GCC 和 MSVC 对编写的代码很满意,但是除非我将命名空间放入,否则另一个编译器会抱怨。C++ 标准是怎么说的?
c++ - C++ 类成员名称查找问题(关于标准 n3225 的措辞)
我对标准 10.2/13 很困惑,
[注意:即使名称查找的结果是明确的,使用在多个子对象中找到的名称可能仍然是不明确的(4.11、5.2.5、5.3.1、11.2)。-结束注释] [示例:
我不明白为什么这是明确的 int B1::* mpB1 = &D::i; // 明确的
Visual C++、Gcc 和 CLang 都说它是对 D::i 的模棱两可的访问!
措辞似乎与核心问题 #39 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#39有关,最终提案在这里:http://www .open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1626.pdf
我现在发现新的基于算法的措辞 (10.2/3-10.2/6) 更加令人困惑,因为 10.2/9、10.2/10、10.2/11 和 10.2/13 中的注释都没有完全符合 10.2/ 3-10.2/6。我可以将 10.2/9-10.2/11 作为例外,但我对 10.2/13 尤其感到困惑。我不知道 10.2/13 的意图。
10.2/13中的例子应该如何按照10.2/3-10.2/6查找?10.2/13的意图是什么,即10.2/13被认为是10.2/3-10.2/6的例外是什么情况?
请给我一些提示。非常感谢你。
经过一番思考,我认为 10.2/13 的意图对我来说更清楚了。
int B1::* mpB1 = &D::i; // 明确的
这应该是明确的,当前的编译器对此是错误的。这是明确的,因为指向类成员初始化的指针不涉及访问对象。
int D::* mpD = &D::i; // 模糊转换
这实际上意味着当从 int B1::*mpB1 转换为 int D::*mpD 时,由于基类不明确,转换是不明确的。
c++ - 私有继承:名称查找错误
我有以下无法编译的代码示例:
gcc 打印的错误是:
test.cpp:6: 错误: `class my::base1' 不可访问
test.cpp:17:错误:在此上下文中
现在,我可以猜到问题出在哪里:当查看 的声明时print
,编译器看到base1
并认为:base1
是 的基类子对象derived* this
,但您无权访问它!虽然我打算这base1
应该只是一个类型名称。
我如何在 C++ 标准中看到这是正确的行为,而不是编译器中的错误(我确信这不是错误;我检查过的所有编译器都是如此)?
我应该如何解决这个错误?以下所有修复都有效,但我应该选择哪一个?
无效打印(类base1* 指针){}
无效打印(::my:: base1* 指针){}
类基1; 无效打印(base1* 指针){}
编辑:
c++ - 为什么这个程序交换值?
我有以下代码:
程序给出输出:
该程序实际上交换了值!这是为什么?的参数swap()
不是指针或引用。
(我正在使用 VS 2005)
c++ - 3.4.2 从 n3290 Draft 中查找依赖于参数的名称
ISO草案n3290第3.4.2节第1段的一点:
当函数调用中的后缀表达式是unqualified-id时,可能会搜索在通常的非限定查找期间未考虑的其他命名空间,并且在这些命名空间中,可能会找到以其他方式不可见的命名空间范围的友元函数声明。这些对搜索的修改取决于参数的类型(对于模板模板参数,模板参数的命名空间)。
在这里,他们谈到“对搜索的这些修改取决于参数的类型/模板模板参数/模板参数的名称空间”......任何人都可以举例说明吗?我尝试使用argumetn types..please expalin with template template argument types & namespace of the template argument type
c++ - 来自 n3290 的一点:依赖于参数的名称查找
n3290 ISO 标准草案中的一点:第 3.4.2 节,第 2 点
在这里我理解了第 2、3 和 6 点..任何人都可以尝试给出一些例子..以理解另一点..请举例说明?
而且在第二点,他还给了一个注释:“非类型模板参数不有助于关联命名空间的集合”..也解释一下......?
c++ - 名称不合格的名称查找:C++0x 草案 n3290
ISO C++ 草案 n3290 中的一点:3.4.0 第二点
“在表达式的上下文中查找”的名称在找到表达式的范围内被查找为非限定名称。
有人可以用一个例子来解释这个陈述吗?
c++ - “名称查找应找到名称的明确声明
ISO 标准中的一点:n3290 草案:3.4 名称查找,第 1 点
我尝试使用命名空间名称
任何人都可以举一个例子(使用 typedef-names 、 namespace-names 和 class-names ).....
编辑:使用命名空间名称
例子 :
这就是我认为以上..点代表我认为....
但我不明白......在 typedef-names 和 class-names 方面
EDT:我不认为这是可能的重复?
因为这里我们在谈论明确的声明?事实并非如此......并且......我举了一个例子(我理解)......
但是..我的运气不好.........只需指定..可能重复..关闭问题?这个问题也是我问的?
cuda - CUDA中全局变量的字符串查找错误?
我有类似的东西:
__constant__ double PNT[ NUMCOORDS ];
__device__ double PNT[ NUMCOORDS ];
取决于一些预处理器选择。然后我使用这个变量:
cudaMemcpyToSymbol("PNT", point, pntSize)
但是,有时(我真的不能说什么时候真的让我感到困惑)我收到错误消息:
按字符串名称查找的重复全局变量
检查 CUDA 错误时。我尝试替换"PNT"
为PNT
奇怪的是,这有效:
cudaMemcpyToSymbol(PNT, point, pntSize)
我应该在实践中使用这个解决方案(而不是使用字符串"PNT"
)吗?
c++ - C++ 中的参数依赖名称查找:来自 n3290 Draft
ISO C++ DRAFT n3290 中的一点:依赖于参数的名称查找:第 3.4.2 节,第 2 段,
对于函数调用中的每个参数类型 T,有一组零个或多个关联的命名空间和一组零个或多个关联的类需要考虑。命名空间和类的集合完全由函数参数的类型(以及任何模板模板参数的命名空间)确定。用于指定类型的 Typedef 名称和 using-declaration 不构成该集合。命名空间和类的集合通过以下方式确定:
—如果 T 是基本类型,则其关联的命名空间和类集都是空的。
— 如果 T 是类类型(包括联合),则其关联的类是:类本身;它所属的类别(如有的话);及其直接和间接基类。其关联名称空间是其关联类是其成员的名称空间。
此外,如果 T 是类模板特化,则其关联的命名空间和类还包括: 与为模板类型参数(不包括模板模板参数)提供的模板实参类型相关联的命名空间和类;任何模板模板参数都是其成员的命名空间;以及用作模板模板参数的任何成员模板是其
成员的类。[注意:非类型模板参数不参与关联命名空间的集合。——尾注]
任何人都可以用一个例子来解释这个......请
在上面的陈述中,“命名空间和类的集合都是空的”..这怎么可能?
而在第二点,他又说...请任何人解释一下吗?