问题标签 [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 投票
3 回答
1262 浏览

c++ - 为什么在类的 const 版本上选择非 const 版本?

以下是测试代码:

现在,在调用时:

为什么它总是选择非常量版本?即使 makeoperator const int () const;对调用没有任何影响foo()。除了标准参考之外,有人可以从逻辑上解释其背后的原因吗?

0 投票
4 回答
446 浏览

c++ - 这种过载解决头痛的原因是什么?

我有一个程序,其中有很多嵌套的 if/switch 语句,这些语句在多个地方重复。我尝试将其提取出来并将开关放在模板方法类中,然后允许客户端使用重载来重载他们想要专门处理的开关分支:

但是,这无法编译(至少在ClientMergeFooTwo's 的情况下),说它不能将 Foo& 转换为 SpecificFoo&。任何想法为什么它失败了转换而不是选择完美的通用重载MergeFoo

编辑:好吧,考虑到我尝试编写它的速度,这个伪代码示例显然做得不太好。我已经纠正了一些错误...

0 投票
1 回答
160 浏览

c# - 重载方法中的 StackOverflowException

我试图在这样的代码中调用重载方法:

一切看起来都不错,但是抛出了 StackOverflowException。据我了解,如果我调用重载方法,那么应该调用最具体的方法版本,但在这种情况下Method(BaseClass<ChildClass> other)调用的是Method(ChildClass other).

但是当我使用演员表时:

一切都按预期工作。我错过了什么吗?或者这是.NET 中的一个错误?在 .NET 2.0、3.5、4.0 中测试

0 投票
2 回答
223 浏览

c++ - c++ overload operator resolution

I'm learning c++ and using C++ Primer. Consider the following exercise 14.46:

When I compile using gcc 4.5 the above program, I get

Why is (3) not selected ? Isn't it exact match?

However, I noticed that removing const-ness of parameter in (3) matches exactly, i.e.,

Using (4) there is no ambiguity. Am I missing something here?

0 投票
5 回答
2859 浏览

c++ - C++ 编译器选择错误的类成员函数重载

我有这个代码:

但是,编译器选择了错误的Other::some_function()in重载wtf_func()(即非 const 重载)。我怎样才能解决这个问题?请注意,由于某些原因,我无法更改Other::some_function().

0 投票
2 回答
1581 浏览

c++ - 由于超类导致重载构造函数的模糊调用(按值传递)

我围绕 GSL 的某些部分编写了一个小的 C++ 包装器,并遇到了以下难题(对我而言)。代码(简化为基本内容)如下:

不会使用 gcc 4.4.5 g++ -c v.cpp 编译但会产生

我很惊讶,受保护的基类 gsl_vector_view 被调用 useVector( Vector ) 考虑在内。我会认为 useVector 属于“C++ 编程语言”的说法中的“公众”,第 3 e.,p。405,因此无法访问该受保护的信息,因此不会被它混淆。我知道我可以通过将构造函数声明为来消除歧义

我不知道(老实说,也不明白),当我将构造函数声明为时,重​​载调用的歧义消失了

即通过引用传递参数(无论如何我都会考虑正确的做事方式)。

0 投票
2 回答
2599 浏览

c# - 使用动态参数的方法重载解析

这可能之前已经回答过了。我看到许多“动态方法重载解析”问题,但没有一个专门处理传递dynamic参数的问题。在下面的代码中Test,最后一次调用M无法解析(它不会编译)。错误是:[前两个重载M]之间的调用不明确。

  1. 为什么,由于类型不是静态已知的,它不解决重载接受dynamic
  2. 甚至可以使用重载方法dynamic吗?
  3. 解决此问题的最佳方法是什么?
0 投票
4 回答
23556 浏览

c++ - 调用 const 函数而不是其非 const 版本

为了我的目的,我尝试包装类似于 Qt 的共享数据指针的东西,经过测试,我发现应该调用 const 函数时,选择了它的非 const 版本。

我正在使用 C++0x 选项进行编译,这是一个最小的代码:

如您所见,Data.x 是一个 const 函数,因此调用的 operator -> 应该是 const 的。当我注释掉非常量时,它编译时没有错误,所以这是可能的。然而我的终端打印:

“非常量数据指针”

是 GCC 错误(我有 4.5.2),还是我遗漏了什么?

0 投票
2 回答
873 浏览

c++ - C++11 重载解析的奇怪案例

我今天遇到了一个相当奇怪的重载解决案例。我将其简化为以下内容:

我完全期望C c({1, 2})匹配 的第一个构造函数C,可变参数的数量为零,{1, 2}并被视为S对象的初始化列表构造。

但是,我收到一个编译器错误,表明它与已删除的 C 复制构造函数匹配!

我可以看到它是如何工作的 -{1, 2}可以解释为 C 的有效初始化程序,1作为初始化程序S(它可以从 int 隐式构造,因为它的构造函数的第二个参数具有默认值),并且2作为一个可变参数......但我不明白为什么这会是一个更好的匹配,特别是看到有问题的复制构造函数被删除。

有人可以解释一下这里起作用的重载解决规则,并说明是否有一种解决方法不涉及在构造函数调用中提及 S 的名称?

编辑:由于有人提到该片段使用不同的编译器编译,我应该澄清一下,我在 GCC 4.6.1 中遇到了上述错误。

编辑 2:我进一步简化了代码片段,以得到更令人不安的失败:

错误:

而这一次,GCC 4.5.1 也给出了同样的错误(减去constexpr它没有隐式生成的 s 和 move 构造函数)。

很难相信这是语言设计者的意图......

0 投票
1 回答
279 浏览

c# - 奇怪的 C# 编译器行为(重载解决方案)

我发现以下代码的 C# 编译器行为非常奇怪:

在最后一行断言失败并显示以下消息:

我理解测试失败的原因:在其他情况下p2 = new SqlParameter("@p", 0);解决为. 但我不明白为什么会这样。对我来说它看起来像一个错误,但我无法相信 C# 编译器会有这样的错误。SqlParameter(string, SqlDbType)SqlParameter(string, object)

这有什么原因吗?

PS对于任何带有枚举参数和0值的方法重载似乎都是一个问题(SqlDbType是枚举)。