问题标签 [overload-resolution]
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.
scala - 为什么 Scala 类型推断在这里失败?
我在 Scala 中有这个课程:
现在,
不编译,报错
错误:缺少扩展函数的参数类型 ((x$1) => x$1.trim)
为什么类型不是推断为String
?从错误看来,隐式转换确实会触发(否则错误将类似于“tap
不是类的成员String
”)。似乎转换必须是 to Tapper[String]
,这意味着参数的类型是String => Unit
(或(String => Unit)*
)。
有趣的是,如果我注释掉任何一个tap
定义,它就会编译。
c++ - 为什么编译器不将此调用解析为模板函数?
在下面的程序中,为什么编译器会为调用printMax
模板函数而不是调用函数生成错误printMaxInts
?
c# - 重载解析和虚方法
考虑以下代码(它有点长,但希望你能遵循):
如果您认为该程序的输出是“Foo(B)”,那么您将和我在同一条船上:完全错误!事实上,它输出“Foo(A)”
如果我从类中删除虚拟方法C
,那么它会按预期工作:“Foo(B)”是输出。
为什么编译器会选择采用A
whenB
是更多派生类的版本?
c++ - 如何在函数重载决议中转储候选人?
如何转储函数调用的候选函数(或可行函数或最佳可行函数)?
我知道 g++ 提供了转储类层次结构的选项。(事实上,Visual Studio 2010 提供了一个类似的选项,但它没有记录。我记得读过一些关于它的东西——可能在 VC++ 团队博客中——但我记不太清楚了。)
最近一直在看C++0x草稿中关于重载解析的内容,着实让我尴尬。
是否有任何编译器提供转储候选函数、可行函数或最佳可行函数的选项?
注意:重载解析场景中的候选函数与编译器错误中的候选函数不同。重载解决方案中的候选/可行/最佳可行函数有其自身的含义。我知道它们是重载解决的三个阶段:找到候选函数;找到可行的功能;找到最佳可行的功能。通常,最好的可行函数只是一个候选函数;否则,调用是模棱两可的。每个阶段都有自己的规则。
c++ - 关于重载解析的奇怪编译错误
此代码片段:
在 Comeau 上给出以下错误,在 GCC 上给出一个非常相似的错误:
但是,如果在#2
. 之前定义#1
或者last
在ns
.
对此有何解释?
c++ - 为什么 NULL 被转换为 string*?
我看到了以下代码:
Q1> 我在理解以下语句时有问题
特别是 是什么意思operator T*()
?
Q2> 为什么f(NULL)
终于触发了f(string*)
?
谢谢
c++ - 名称查找中的重载分辨率/歧义(哪一个)
$7.3.3/14 (C++03)
'f' 中代码中的注释表明,可以预期 'B::x' 或 'C::x' 之间存在歧义。
但是,在使用 g++(ideone) 或 Comeau 编译时,错误会略有不同。这些错误不是表示 B::x 或 C::x 中的歧义,而是表示 A 是 D 的歧义基这一事实
prog.cpp:在函数'int f(D *)'中:prog.cpp:16:错误:'A'是'D'的模糊基数</p>
和
“ComeauTest.c”,第 21 行:错误:基类“A”不明确 return d->x(); // 模棱两可:B::x 或 C::x
按照 $10.2 中的名称查找规则,我觉得代码片段中的注释并不真正正确。该错误确实首先与基类“A”的歧义有关,而不是其他任何事情(例如重载决议中的歧义)。有什么想法吗?
c++ - 内置运算符候选
C++03 $13.6/1-》[...]如果有用户编写的候选与内置候选算子函数同名、参数类型相同,则内置算子函数被隐藏,不包括在内在候选函数集中。”
我不确定标准中这句话的意图。是否可以定义与内置运算符具有相同名称和类型的用户定义候选函数?
例如下面这显然是错误的。
那么这句话是什么意思呢?
c++ - C ++中的距离计算错误
我有以下代码,但这里是错误列表
c# - 泛型、重载解析和委托(抱歉,找不到更好的标题)
我注意到泛型有一个非常奇怪的重载解决问题......
考虑以下方法:
(C# 4,在 LINQPad 中测试)
如果我尝试Foo
使用 lambda 表达式作为选择器进行调用,一切正常:
但是如果我替换x => x
为Identity
,编译器将无法在两个Foo
重载之间做出决定:
第二个重载如何成为有效的候选人?类型推断正确地确定TSource
是int
,所以方法的T
参数Identity
也必须是int
,所以返回类型也必须是int
......Identity
可以是 aFunc<int,int>
或 a Func<double,double>
,但不是 a Func<int,double>
!
而且情况会变得更糟!即使我明确指定所有类型参数,我仍然会收到相同的错误:
这里怎么可能有歧义?据我所知,接受 a 的重载Func<int,double>
不可能成为候选者。我想解释必须在规范中的某个地方,但我找不到相关的位......或者它可能是编译器中的一个错误,但我想这不太可能。
请注意,如果我明确创建委托,它确实有效:
那么,有人可以解释这里发生了什么吗?另外,为什么它适用于 lambda 而不是方法组?