问题标签 [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.

0 投票
2 回答
3677 浏览

c# - 为什么我的 lambda 报告“并非所有代码路径都返回值”?

下面的代码给出了一个错误

并非所有代码路径都返回“System.Func”类型的 lambda 表达式中的值。

它突出显示line =>。不知道为什么?

0 投票
1 回答
273 浏览

java - 寻找实现 javac 的重载解析算法的 Java 代码

假设我有一个Objects 数组(特别是 an Object[])和一个 Constructor 对象数组。

任何人都可以向我推荐一些 Java 代码,这些代码可以查看 Constructor 对象并选择一个对于我的数组中对象的实际类型最具体的代码。换句话说,我想要一个javac用于在一组重载方法中进行选择的算法的实现。

0 投票
1 回答
765 浏览

c++ - 使用 Bind 生成无参数函数会导致错误

我试图弄清楚 std::bind 与 boost::signal2 信号的正确使用。

我使用 clang++(来自 Xcode 4.2.1)得到的错误集是:


他们主要集中在两条线上:

其中使用函数原型:

main 是 Myron::Window&,resize 和 close 是恭敬的:

我读过的和被告知的一切都让我相信我使用这些是相当正确的,所以我不确定问题出在哪里。

我意识到第一个错误是 boost::bind 可能通过 Myron.h 文件中的 boost/signals2.hpp 进入这里的问题。第二个错误,更是一个谜。

完整的主要源文件在这里:

显示所有内容的主要源代码存储库在这里:https ://github.com/iaefai/Myron/tree/master/Myron

任何尝试的建议将不胜感激。我曾尝试制作较小的测试用例,但没有成功解决问题。

0 投票
5 回答
3071 浏览

c# - 为什么添加一个方法会添加一个模棱两可的调用,如果它不会涉及歧义

我有这门课

如果我这样称呼它:

它写入Normal Winner控制台。

但是,如果我添加另一种方法:

我收到以下错误:

以下方法或属性之间的调用不明确: > ' Overloaded.ComplexOverloadResolution(params string[])' 和 ' Overloaded.ComplexOverloadResolution<string>(string)'

我可以理解添加方法可能会引入调用歧义,但这是已经存在的两种方法之间的歧义,(params string[])并且<string>(string)!显然,歧义中涉及的两个方法都不是新添加的方法,因为第一个是 params,第二个是泛型。

这是一个错误吗?规范的哪一部分说应该是这种情况?

0 投票
3 回答
1802 浏览

c++ - 这应该编译吗?重载分辨率和隐式转换

这个例子似乎可以用 VC10 和 gcc 编译(虽然我的 gcc 版本很旧)。

编辑:R. Martinho Fernandez 在 gcc 4.7 上尝试了这个,行为仍然相同。

但是clang抱怨:

通过查看此表达式,重载决策正在考虑两个可能的函数:

  • 调用 Something::operator[] (在用户定义的转换之后)
  • 为 const char* 调用内置运算符(想想“32”[d])(在用户定义的转换和标准转换双倍到长之后)。

如果我写d["32"]为 as d.operator[]("32"),那么重载决议甚至不会查看选项 2,并且 clang 也将编译得很好。

编辑:(澄清问题)

这似乎是重载解决方案中的一个复杂领域,因此我非常感谢在这种情况下详细解释重载解决方案并引用标准的答案(如果有一些模糊/高级可能是未知的规则) .

如果clang是正确的,我也有兴趣知道为什么这两者模棱两可/一个不优于另一个。答案可能必须解释重载决议如何考虑两个候选者所涉及的隐式转换(用户定义和标准转换)以及为什么一个不比另一个更好。

注意:如果将 operator double() 更改为 operator bool(),所有三个 (clang, vc, gcc) 将拒绝编译,并出现类似的模棱两可的错误。

0 投票
6 回答
1005 浏览

c++ - 成员函数隐藏自由函数

为什么 C++ 无法调用 free 函数(这是唯一具有正确签名的函数)?

0 投票
6 回答
1705 浏览

c++ - C++:继承和重载决议

我在这里阅读 C++ 谜题:http: //gotw.ca/gotw/005.htm

我不明白他对静态与动态重载解决方案(或默认参数)的解释,所以我试图提炼这个问题并自己编写一些测试:

输出是:

为什么在对的调用中foo(),C++ 似乎认识到它指向一个Derived但在调用foo(1.0)中,C++ 在类中看不到void foo(double a)函数Derived

在我看来,有一些相互竞争的想法,即 C++ 具有多态性,这解释了第一次调用,但重载决议是在编译时完成的,这解释了第二次调用。

0 投票
3 回答
482 浏览

c++ - C++ 转换运算符和重载决议

给定这个例子,其中包括一些重载:


及其输出:


我的问题是 - 为什么void operator <<(A<T> &, const void *)要求发表声明test << source;?任何人都可以引用涵盖此案例的标准的特定部分吗?

0 投票
1 回答
433 浏览

c# - C# 4.0 编译时错误,当错误的重载包含未引用的 .NET 组件中定义的参数类型时,无法解决重载

下面是 C# 4.0 控制台程序的简单代码:

SearchRequest 有3 个构造函数;对于此示例,只有带 4 个参数的两个重要:

在这两个构造函数之间,它们的第一个、第三个和第四个参数具有相同类型和命名的参数。只有第二个参数不同:字符串 ldapFilterXmlDocument filter

对我来说,上面的代码显然是调用构造函数,它的第二个参数声明为:string ldapFilter

但是,如果此代码所在的项目没有对System.XML的引用,则编译会导致以下错误:
“System.Xml.XmlDocument”类型是在未引用的程序集中定义的。您必须添加对程序集 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的引用

显然,编译器无法评估要使用哪个重载,因为错误的重载具有由于缺少对声明组件的引用而无法理解的类型的参数。当然,编译器必须找到一个“最佳方法”来匹配我的代码,但是由于我的第二个传递参数是一个字符串,为什么编译器需要担心将我的代码与XmlDocument重载匹配?或者,作为 System.DirectoryServices.Protocols.SearchRequest 使用 XmlDocument 类型(作为构造函数参数类型);为什么编译器还没有足够了解 XmlDocument 是什么来确定一个字符串不是一个字符串,从而能够选择正确的重载?

我已经有两个解决方法可以编译没有错误:

  1. 在项目中添加对 System.XML 的引用。

  2. 命名第二个参数(因此也必须命名第三个和第四个),如下所示:

    对于我的特殊情况,这是可行的,因为两个重载的第二个参数不仅在类型上而且在名称上也不同(ldapFilter 与 filter)。

不过,如果不需要任何变通方法,那就太好了。

0 投票
2 回答
2584 浏览

c++ - 带有 std::future 的 VS 11 - 这是一个错误吗?

我最近安装了 Visual Studio 11 开发者预览版。在玩线程和期货时,我遇到了这个设置:

所以,很简单。但是由于“foo”有两个参数,VS 11 不想编译它。(但是,g++ 确实如此:http: //ideone.com/ANrPj)(运行时错误没问题:C++0x 的 gcc 实验实现上的 std::future 异常)(VS 11 错误消息:http://pastebin. com/F9Xunh2s )

我现在有点困惑,因为这个错误对我来说似乎非常明显,即使它是开发人员预览版。所以我的问题是:

  • 根据 C++11 标准,这段代码是否正确?
  • 此错误是否已知/已报告?