问题标签 [unqualified-name]
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.
java - Java中的不合格名称
我们编程课上的老师在谈论“不合格的名字”,但我想知道它们到底是什么。
我怀疑诸如方法名称之类的东西是不合格的,但我不确定。
有谁能给我解释一下吗?我需要知道这一点,因为我需要解释 Java 以何种方式看起来是不合格的名称。
c++ - C++ non-qualified lookup
I have the following code:
The idea is to imitate the behavior of gtest operator<< & PrintTo, so that one could overload behaviour for some std classes, which can not be done through ADL since adding anything to std namespace is not allowed. However, if I try to do it with a usual function f()
, then the overload for f(mystd::A())
is considered to be defined too late (if one comments the template definition of f()
the gcc gives note: ‘int f(const mystd::A<int>&)’ declared here, later in the translation unit
)
The question is why the behaviour is different for operator-()
and f()
?
c++ - 错误:'const'之前的预期不合格ID
我已经看到了一些关于这个错误的问题,但是我没有太多用 C++ 创建类的经验,所以我实际上并不明白答案的含义。我还应该指出,我没有编写此代码。
我收到标题中所述的错误,我相信它来自这个头文件,但我不知道错误的含义以及如何修复它。
这是文件:
和完整的错误:
如果有人可以向我解释这意味着什么以及发生了什么,我将非常感激,谢谢!
c++ - 在范围内定义的函数,但编译器抱怨它超出范围
我尝试为两个 2x2 矩阵实现 strassens 算法,以制作递归矩阵乘法算法,但是该实现无法编译,给我如下错误:
“未在此范围内声明 strassen”和“不合格 ID”
这是代码:
你能告诉我为什么我得到编译时错误。我还需要知道如何为 2D 数组分配空间,因为一旦函数退出返回垃圾值malloc
,我当前的实现就会超出范围。C
c++ - 在我看来,在 [basic.lookup.argdep]/3 的示例中调用 g(parm, 1) 有两个候选函数
对于调用g(parm, 1)
,我们在集合X中具有全局范围内的声明void g(NS::T, float);
。AFAICT,我们在集合Yvoid g(T, int);
中也有namespace中的声明,这是 typeNS
参数的关联命名空间。因此,如果我没记错的话,这两个声明是重载解决方案的候选者。那么,与命名空间中的声明相比,全局范围内的声明是否更受欢迎?为什么?我非常感谢标准的引用作为答案。parm
NS::T
NS
c++ - 限定名称的重载解析
考虑这个函数调用:
11.3.1.1.1,第 3 段 [over.call.func] ( N4778 ) 涵盖了这种情况:
在非限定函数调用中,名称不由
->
or.
运算符限定,并且具有更通用的primary-expression 形式。按照函数调用中名称查找的正常规则,在函数调用的上下文中查找名称...
在这里,foo::bar
是一个不合格的名称,因为它没有被->
or.
限定。所以本段适用。现在,短语“在上下文中查找”的含义在 6.4 第 2 段 [basic.lookup] 中进行了解释:
“在表达式的上下文中查找”的名称在找到表达式的范围内被查找为非限定名称。
但是, 是名称查找领域中foo::bar
的限定名称。也就是说,这个组合的段落基本上就是说,限定名是按照非限定名查找规则来查找的。但是,我不认为不合格的名称查找能够递归地进入更窄的范围,即to 。这是缺陷吗?foo::bar
foo
bar
c++ - C ++不合格名称查找:不同cpp中的不同结构大小导致运算符new分配的内存少于构造函数进程?
这是示例:
Main.cpp
:
MooFoobar.h
:
MooTestFoobar.h
:
FoobarUser.h
:
FoobarUser.cpp
:
所以这里发生了什么:根据包含的顺序,不合格的名称被解析为不同的类型,FoobarUser.cpp
我们得到 size 64
,Main.cpp
我们得到 size 32
。不仅sizeof
不同 -operator new
以不正确的 ( 32
) 大小调用,而且构造函数将初始化 的大小64
,这会导致内存损坏。
在 clang 和 msvc 中,这个程序的结果是:
这听起来很可疑,基本上意味着如果存在名称冲突,则不合格的名称是不可行的,因为根据包含顺序,它可能会导致本质上是不正确的程序。
但是我在 C++ std 中找不到任何可以说明任何无效/格式错误的代码的点。谁能帮我?
它真的是标准而不是一些复杂的大规模编译器问题(尽管我真的看不出编译器如何解决这种情况)?
c++ - 如何解决不合格名称查找问题
我有以下简化程序:
现在的问题是,是否有任何方法可以简化基类类型的完全重复。我的原始代码是这样的:
如您所见,所有模板参数的完全重复并不是很“好”。有机会解决吗?
如果上面的代码没有依赖模板参数(将单行 1.))从上面的示例更改为:
该类变得非常简单并且更易于维护:
作为对潜在问题的参考,我已经发现了那个问题
但不知道简化我的代码。
c++ - Mongoose - 包含标准 C++ 库文件时出错
我正在使用 mongoose 在 C++ 中构建 HTTP 服务器,当我尝试在程序中包含其他文件时收到错误消息:
每当我尝试在我的程序中包含以下文件时,都会发生这种情况:
我试图通过注释掉其中一些文件来将其缩小到导致问题的文件之一,但似乎其中任何一个文件都会导致错误。有趣的是, string.h 不会导致错误。
c++ - 为什么这个模板函数的行为不像预期的那样?
我正在阅读有关模板函数的内容,但对这个问题感到困惑:
如果我不写,结果是一样的template void g<double>(double);
。
我认为g<double>
应该在之后实例化f(double)
,因此对f
in的调用g
应该调用f(double)
。令人惊讶的是,它仍然调用f(int)
. g<double>
谁能帮我理解这一点?
阅读答案后,我弄清楚了我的困惑到底是什么。
这是一个更新的示例。除了我添加了一个专业化之外,它几乎没有变化g<double>
:
随着用户的专业化,g(1.0)
行为符合我的预期。
编译器是否不应该在同一个地方自动执行相同的实例化g<double>
(或者甚至在之后main()
,如The C++ Programming Language , 4th edition 的第 26.3.3 节所述)?